2013-05-30 2 views
1

이 프로그램을 가지고 있고 나는 그것이 하나 증가 내가 Enter 키를 누르면 루프가 시작하면 내 카운터의 값을 내가 문자getchar가() 함수는 우회 한 루프

#include <stdio.h> 

    int main(void){ 

     //Declarations 
     long nc; 

     //Instantiations 
     nc = 0; 

     while (getchar() != EOF){ 
      ++nc; 
      printf("%ld\n", nc); 
     } 

     return 0; 
    } 

줄 때마다 인쇄 할 나는 1,2,3,4,5를 얻었습니다. 괜찮습니다. 그러나 캐릭터 나 다른 것을 입력하면 다음 두 숫자 12,34,56,78이 출력됩니다. 왜 그 일이 일어나는거야 ??

나는 GCC 4.6.3 우분투 12.04 버전에서 프로그램을 실행하고 있습니다.

답변

3

터미널 입력 line buffered 일반적이다. 프로그램은 ENTER를 누를 때만 처리 할 입력을받습니다. 여러 문자를 입력하면 getchar()이 순서대로 각 문자를 반환하므로 입력 한 각 문자에 대해 한 줄의 출력을 얻습니다 (줄 바꿈 자체 포함).

+1

은 매우 설명 대답 주셔서 감사합니다. 나는 내가 더 많은 글자를 쓰면 더 많은 증분과 인쇄물을 얻는다는 것을 알지 못했다. –