2011-10-23 4 views
0

두뇌 통역사를 구현 중이며 두 개의 연속적인 , 명령 호출에 어려움을 겪고 있습니다.C에서 fgetc에 대한 순차적 호출

Enter Number: 
3     // This is me, manually entering the value. 
Number Entered 
3Enter Number: 
Number Entered 

왜 작업 fgetc 두 번째 호출이되지 않습니다 :

여기 내 코드의 추출물의 다음

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define MEM_SIZE 30000 
#define MAX_LINE_LENGTH 256 

int main (int argc, char **argv) 
{ 
    char *input = ",.,."; 
    char bytes [MEM_SIZE] = {0}; 

    int pos=0; 
    int i=0; 

    while (input[i] != '\0'){ 

     switch (input[i]){ 
      case '.': 
       printf ("%c", bytes[pos]); 
       break; 
      case ',': 
       printf ("Enter Number:\n"); 
       bytes[pos] = fgetc (stdin); 
       printf ("Number Entered\n"); 
       break; 
      default: 
       break; 
     } 
     i++; 
    } 
    return EXIT_SUCCESS; 
} 

이 프로그램의 출력?

답변

5

fgetc에 대한 두 번째 호출이 작동하지 않는다고 생각하는 이유는 무엇입니까? 두 번째 fgetc\n을 읽습니다 (return, 바로?).

또 다른 문제는 문자로 읽는 중입니다. fgetcint을 반환합니다. 맹목적으로 사용하기 전에 EOF을 확인해야합니다.

+0

+1 더 정확한 답변. –

1

다음에 데이터를 bytes[pos]에 저장할 때 pos 카운터를 앞당기 지 않으므로 이전 데이터를 덮어 씁니다.

btw. 당신이 fgetc()에서받은 정보를 디버깅하는

printf ("Number Entered: %c\n", bytes[pos]); 

printf ("Number Entered\n"); 

을 변경하려고합니다.

+0

'pos'를 전진시키지 않는 것이 문제 일 수 있지만, OP가 불평하는 행동의 이유가 아닙니다. – cnicutar