2014-09-20 7 views
1

학문적으로는 atoi() 및 scanf() 함수를 직접 작성해야합니다.나만의 scanf 함수 빌드

첫 번째 앱은 매우 간단했지만 두 번째 앱은 문제가 있습니다. 첫 번째

:

int String2Inteiro (char s[]) 
{ 
    int j; 
    int i=0; 
    for(j=0; s[j]!= 0; j++) 
    { 

     i=i*10 + s[j] - '0'; 
    } 

    return i; 
} 

이제 두 번째로 나는 정지 상태에 관련이 있다고 생각 몇 가지 문제에 봉착했습니다. 첫 번째 시도는 고저를 멈추려 고했습니다.

char dig; 
int cont=0; 

do 
{ 
    dig=getchar(); 
    array[cont]=dig; 
    cont++; 
} while (dig!= '\n'); 

두 번째 시도했다 :

int counter=0; 
char a; 
char array[20]; 

while (a!='\n') 
{ 
    a=getchar(); 
    vec[counter]=a; 
    counter=counter+1; 
} 

내가 입력이 잘 표현되어 있는지 확실하지 않습니다 또는 내가 '\ 13'(CR의 ASCII 코드)를 사용했다해야합니다. 사전에

감사합니다,

앙드레

+1

어레이에 추가 한 후 정지 문자에 도달했는지 여부를 테스트합니다. – Barmar

+1

네,' '\ n' '이 맞습니다. 그러나 어떤 변환 지정자가 구현되어 있어야할까요? – mafso

+0

참고로,'scanf' 함수 군을 사용하지 않고'scanf'를 엄격하게 준수하는 것은 불가능합니다. 푸시 백 동작을 얻을 수있는 방법이 없습니다 (단, ungetc는 운동 목적으로 사용해야 함). – mafso

답변

1
당신은 아닌 배열에 추가 한 후 즉시 당신이 정지 문자를 읽을 때 루프의 탈옥해야

: 당신은

while (counter < sizeof(array)) { // Prevent buffer overflow 
    a = getchar(); 
    if (a == '\n') { 
     array[counter] = 0; // Add trailing null to input string 
     break; 
    } 
    array[counter] = a; 
    counter++; 
} 
+0

정확하게 원했던 것입니다. 비록 내가 sizeof (array)를 넘었을 때 while 순환이 끝나기를 기대하고있었습니다. – andrescpacheco

+0

명시 적으로 확인하지 않고 종료하는 이유는 무엇입니까? 당신이 말하지 않으면 컴퓨터는 아무 것도하지 않습니다. – Barmar