簡體   English   中英

輸入緩沖區刷新

[英]Input buffer flush

考慮下面的代碼:

#include<stdio.h>
int main(){
char c;
while( ( c=getchar() ) != EOF )
        printf("%c\n",c);
return 0; 
}

我輸入為:hi ^ Z

輸出為:

 h i (an arrow pointing towards left) 

[對不起,我找不到上面箭頭的字符。 ]

有人可以解釋一下輸出結果嗎? 由於^ Z是字符串的一部分,並且有需要刷新的字符,我認為^ Z不應該被傳遞,因此輸出應該是,

 h i (new line ) 

PS-我在Windows上,^ Z因此是EOF。

這里的問題是,一個char不足以容納EOF的值。 您需要使用int類型。

更改char c; int c;

也就是說, getchar()將在標准輸入中返回所有未決項目。 如果在某些輸入后使用組合鍵,則該操作將類似於刷新流。 要從getchar()返回EOF ,您需要再按一次組合鍵。

簡而言之,如果您希望getchar()CTRL + Z上返回EOF ,請確保stdin沒有任何內容。

也就是說,對於托管環境, main()的正確簽名至少是int main(void)

請參考http://www.cplusplus.com/reference/cstdio/getchar/。它說getchar返回類型是int 編譯器應發出警告。 請不要忽略此類警告。

您將int分配給char會導致丟失。 嘗試將其轉換為int並進行打印。

您也可以使用%cprintf打印int ,並將類型轉換為char

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM