2017-01-22 11 views
1

비트가 현재 코드와 혼동됩니다. 정말 그러나, 유니에서 공부하고 현재getchar()! 반환 된 값을 인쇄하려고했습니다! = 입력 된 모든 문자의 EOF

지금은 주로 C에서 좋은 몇 년 ++와 자바의 조금 봤는데 프로그래밍 브라이언 W. 커니 핸에 의해 를 통해 C 프로그래밍 언어 (제 2 판)을가는 C와 많이 연주했는데 뭔가가 정말로 나를 괴롭혔다.

그래서 당신은 getchar()에 의해 판독 된 문자가 될 것이라고 증명하고 싶은 책에 1-6 행사 중 하나 1 또는

0 지금은 완전히 그것이 있는지 확인하기 위해 버퍼와 검사의 문자를 읽고 이해 그래서 1 다른 반환하면되지 EOF, 0

이것은 내가 a을 입력하고 Enter 키를 입력하는 경우는이 a과 입력 읽고 1,1 또한 내가 CTRL+D를 사용하는 경우가 리턴 것을 의미한다 0 인 경우 EOF이 발생합니다. 내가 가지고있는 문제와 내가 논리를 이해하지 못하는 부분은 다음과 같습니다. aa Ctrl+D, 내가 읽는 방식은 1,1,0이고 a,aEOF입니다. 그러나 1,1 다음 인쇄를 기다리는 것으로 보입니다.

왜 이런가요?

여기는 지금까지 작성한 코드입니다. 내가 aa ctrl+D을 수행 할 때 자사가 1 또는 0하지만 문제는 여전히 유효 ..

왜 내가

1 Not End Of File 
1 Not End Of File 
0 End Of File? 

을 또한 인쇄되지 않을 경우

#include <stdio.h> 

main() 
{ 
    int c; 

    while(c = (getchar() != EOF)) // Read char in buffer and check to see if it's EOF or not, then assign a 1 or 0 to c 
    { 
     printf("1 Not End Of File\n"); 
    } 
    printf("0 End Of File\n"); 
} 

분명히 내가 보여 printf("%d",c);을 사용할 수 있습니다 그러나이 특정 질문에 대한 답변은 사이트에서 이미 확인되었지만 아무도이 특정 문제에 대해 자세히 대답하지 않은 것으로 보입니다. 대신 getchar()이 어떻게 하나의 char 및 re 광고 및 그 동안의 방법은 EOF 일 때 종료되지만, EOF이 몇 문자에 추가 된 경우 다음 줄이 실행되지 않는 이유는 아닙니다.

그것은 잠시 후 두 a의와 읽기보다는이 CTRL+D에 도달해야 할 때 0c를 설정 한 다음 종료 것, 앉아서 이상의 입력을 기다리는 것?

+2

터미널 입력과 관련된 몇 가지 문제가있을 수 있으며 C 코드와 관련이 없습니다. 이 세 가지 실험을 비교해보십시오 : (1) "a a RETURN CTRL + D", (2) "a CTRL + D", (3) "a CTRL + D CTRL + D". –

+0

당신은 그것이 내가 생각했던 것을 보았습니다. 나는 세 가지 실험을 모두 테스트했다. 1) 1,1,1을 반환하고 입력을 기다렸다가 Ctrl + d를 누른 다음 0을 출력했다. 2)는 1,1을 반환하고 입력을 기다린다.3)은 1,1 대기 후 0을 입력합니다. –

+0

예상되는 결과이며 Shiping의 대답과 일치합니다. Unix/Linux 터미널 드라이버는 문자를 누적하고 (a) Return 키를 누르거나 Control-D를 누르기 전까지 프로그램에 전달하지 않습니다. 또한 줄의 시작 부분에있는 경우 (즉, 줄 바꿈이 앞에 오는 경우) control-D는 EOF를 생성합니다. –

답변

0

Ctl-D는 입력을 읽는 프로그램을 트리거하는 것으로 생각합니다. 일부 문자를 입력했기 때문에 프로그램에서 읽을 내용이 있고 입력이 끝나지 않습니다. Ctl-D 만 입력하면 프로그램은 입력을 읽으려고하지만 아무 것도 보지 않고 입력 끝까지 도달 한 것으로 간주합니다. Ctl-D 자체가 getchar()에 전달되어 입력으로 읽히지 않도록 추가하는 것과 같습니다.

관련 문제