2014-11-28 7 views
5

나는 C 프로그래밍 언어 책에서 다음 프로그램을 실행하고 있습니다 :이 프로그램을 실행하면getchar가() = EOF

#include <stdio.h> 
main() 
{ 
    int c; 
    while((c=getchar()) != EOF) 
    putchar(); 
} 

, 내가 설명 할 수없는 동작을 얻을. 다음과 같은 순서로 명령 줄에서 문자를 입력하면 : 다음에 이 입력 된 후 hello이 입력되고 프로그램이 ^D이 입력되면 다음 응답이 인쇄됩니다.

그러나 다음과 같이 시퀀스를 변경할 때 : {'h', 'e', 'l', 'l', 'o', '^D'} 다음 응답을 화면에 인쇄 할 : hello, 있지만 프로그램이 종료되지 않습니다. ^D을 입력하면 종료하지 않아야합니까? 프로그램을 종료하려면 두 번째로 ^D을 입력해야합니다. 또는 \n 다음에 ^D을 입력 한 후에 만 ​​프로그램이 종료됩니다. ^D을 입력 할 때 프로그램이 종료되지 않은 이유를 이해할 수 없습니다. 이견있는 사람?

저는 UNIX 시스템에서 실행됩니다.

답변

17

^D ('전송 종료')를 입력하면 입력 버퍼가 플러시되고 지금까지 입력 한 모든 내용이 실제로^D 문자를 보내지 않고 프로그램에 전송됩니다. 개행 문자를 입력하는 것과 비슷하지만,이 경우 개행 문자 자체도 전송됩니다. 프로그램은 0 문자를 읽을 때 입력이 닫힌 것으로 간주합니다. 이것은 뉴 라인 다음에^D 나 두 개의 연속적인^D를 입력 할 때 발생합니다.

+3

이 값은 C 프로그램이 아니라 운영 체제 입력 스트림의 속성입니다. –

+0

마리안과 매트 맥나브 감사합니다. 필자는 입력 버퍼가 개행 문자 만 입력하여 플러시됩니다. 나는^D와 비슷한 행동을하지 못했습니다. – Nishi