2016-04-27 113 views
0
int kr=0; 
int ss =0; 
while ((kr=getchar()) != EOF){ 
     if(kr != '\n') 
     { 
     ss++; 
     } 

     printf("%d\n",ss); 
} 

有了这个代码,printf的等待直到我按下输入则在该printf的等待输入

enter image description here

打印所有在同一时间顺序SS值等。有人可以解释这种行为吗?

+0

printf与等待行为无关......它是getchar()。但首先尝试清理你的项目并重建它...然后再试一次。 –

+0

有没有办法为getchar()禁用输入缓冲流? –

回答

5

printf而不是等待它是getchargetchar在场景后面使用缓冲区。当该缓冲区为空时,getchar将从标准输入读取1行,并且然后返回第一个字符。如果它不为空,它将立即从缓冲区返回下一个caracter。

这意味着getchar将在您第一次致电时等待。因此,您的printf永远不会执行,直到您按enter

+0

这与我必须按什么输入每次我想要打印的东西有什么关系。我不明白你的解释 –

+0

@DogusUral这意味着你的循环条件中的'getchar'被阻塞,直到你按下回车键,'printf'才会被执行,直到你按下回车键。 – litelite