[英]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
並進行打印。
您也可以使用%c
在printf
打印int
,並將類型轉換為char
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.