2016-04-27 73 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