2017-01-16 1 views
0

우리는 getchar()을 사용하여 각 문자를 표준 출력에서 ​​인쇄 할 수있는 작은 프로그램을 만들지 묻는 메시지가 나타났습니다 ... 나는 다음과 같은 코드가 작동한다고 생각했지만 Windows 콘솔에서 실행할 때 파일 끝까지 문자로

int c = 0; 
while(c != EOF) 
{ 
    c = getchar(); 
    printf("%c\n", c); 
} 
printf("\nOut of loop!\n"); 

내가 코드 문자로 스트림 문자를 인쇄 할 것이라고 생각하고, 표준 입력에서 아무것도 없었다 경우, getchar가()는 EOF와 반환 ...이 입력을 기다리고있는 것처럼 커서가 무기한 중단, 일어나는 루프가 멈출 것이다 .. 내가 입력이 C에서 어떻게 이루어 졌는지에 대해 오해하고 있다고 생각한다. 초보자라면 혼란 스럽다. 어떤 도움이든!


또 다른 혼란 예 :

char str[100]={0}; 
printf("Entrer a string: "); 
scanf("%s",str); //i'll enter a string with spaces to have something to print in the loop 
//let's say i enter Hello Wor^Zld! 
int c = 0; 
while(c!=EOF) 
{ 
    c = getchar(); 
    printf("%c",c); 
} 
printf("Finally done with loop!!\n"); 


나는 콘솔에 다음과 같이 표시 얻을 위의 코드를 실행하면
가 우려>
똑같은 커서를 교수형을 기다리는 중 ... 왜 그런가? Ctrl-Z + Enter "^ Z-Enter"가 디스플레이를 멈추었지만 루프가 계속되는 것처럼 보입니까? 나는 솔직히 이해하는 데 최선을 다하고 있습니다.하지만 솔직히 말해서 혼란 스럽습니다. 도와 주시고 저를 도와 주셔서 미리 감사드립니다!

+3

예, flle에서 입력을 리디렉션하지 않는 한 * stdin (일반적으로 키보드)의 입력을 기다리고 있습니다. 이 함수는'Ctrl-D Enter' (Linux) 또는'Ctrl-Z Enter' (Windows)를 입력 할 때까지'EOF'를 반환하지 않습니다. –

+3

작은 메모 :'while (c! = EOF) { c = getchar();'->'while ((c = getchar())! = EOF) {' – BLUEPIXY

+0

그래, 초보자로서 나는 모든 것을 루프에 넣는 것을 피할 것이다 : P – user7427260

답변

0

원하는 경우 출력물을 인쇄하려면 출력물을 fflush해야합니다. 문자를 인쇄하기 전에 EOF을 테스트해야합니다.

int c; 
while((c = getchar()) != EOF) 
{ 
    printf("%c\n", (char)c); 
    fflush(stdout); 
} 
printf("Out of loop!\n"); 
관련 문제