2016-09-08 3 views
-1
printf("hello2"); 
int i = 0; 
int done = 0; 

while (!done) 
{ 
    char c; 
    printf("hello3"); 
    c = getc(stdin); 
    printf("hello4"); 
    if (isspace(c)) 
    { 
     done = 1; 
     ungetc(c, stdin); 
     printf("hello5"); 
    } 
} 

내 프로그램이 현재 입력 (이 경우 특별히 빈 입력)을 읽으려고합니다. 그러나, 내 프로그램이 작동하지 않는다는 것을 알게 된 후, 나는 printfs를 산란시킴으로써 디버깅을 시도했다. 그리고 그 프로그램은 c = getc(stdin) 이후에 작동을 멈춘다. 내 이론이 옳다면 c = getc(stdin)을 사용하면 무엇이 문제가되지 않습니까?getc (stdin) 후 프로그램이 작동을 멈춘다.

+1

각 출력 문자열에'\ n '을 추가하여 보험 출력이 플러시됩니다. 문제를 식별 할 수있는 코드가 충분하지 않습니다. – chux

+0

'getc()'는'int', 일반적으로 257 개의 다른 값'EOF'와'unsigned char '범위의 값을 반환합니다. – chux

+0

'printf()'를 호출 할 때마다'fflush (stdout);을 사용하여 무엇을 인쇄해야하는지 확인하십시오. – MikeCAT

답변

0

공백 뒤에 입력을 시도 했습니까? 특별한 준비를하지 않으면, 터미널 에뮬레이션이나 프로그램을 실행하는 곳마다 입력 된 모든 키보드 문자가 제공되지는 않습니다. 당신이 enter를 치기까지 기다릴 것이고, 쓰여진 전체 라인에서 작업하게 할 것입니다.

0

Stdin은 입력 문자를 개행 문자 '\ n'까지 입력 스트림으로 플러시하지 않습니다. 그래서 getc (stdin)는 입력을 누르기 전까지는 읽을 것이 없습니다. 엔터를 치지 않고 콘솔 입력을 읽으려면 conio.h 라이브러리의 getch() 함수를 Windows 컴파일러에서 사용할 수 있습니다. getch()는 개행을 기다리지 않고 stdin에서 문자를 읽습니다.

관련 문제