2013-05-30 52 views
1

我有这样的计划,我希望它通过一个递增,每次我给一个字符的getchar()函数绕过一个循环

#include <stdio.h> 

    int main(void){ 

     //Declarations 
     long nc; 

     //Instantiations 
     nc = 0; 

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

     return 0; 
    } 

时间打印我的计数器的值当,如果我按ENTER键循环启动我得到1,2,3,4,5 ...这是可以的。但是如果我输入一个字符或其他东西,它会打印接下来的两个数字12,34,56,78。为什么会发生?

我在gcc 4.6.3 Ubuntu 12.04发行版上运行该程序。

回答

3

终端输入通常为line buffered。当您按下ENTER键时,您的程序仅获得输入。如果您键入多个字符,则您输入的每个字符(加上换行符本身)都会得到一行输出,因为getchar()会按顺序返回每个字符。

+1

谢谢你的回答,很有说服力。我没有注意到,如果我写更多的字符,我会得到更多的增量和打印。 –