1
我感到困惑如何scanf的和的getchar手柄流不同,下面是一個示例代碼:scanf和getchar處理流的方式不同嗎?
while(scanf("%d", &input) != 1)
{
while((ch = getchar()) != '\n')
{
putchar(ch);
}
printf("\nThis is wrong\n");
}
printf("That is right\n");
它是用於測試是否輸入是整數一個簡單的程序。內部while循環用於在單擊Enter之前顯示每個錯誤的輸入值。當我輸入一個隨機字符串如:
qwert
putchar將打印出確切的字符串。但是,如果我換成
while(scanf("%d", &input) != 1)
與
while((ch = getchar()) != '\n')
,並打印出完全相同的字符串,第一個字母「Q」被退學了。 所以我的問題是如何scanf和getchar在外部循環處理這種情況不同?
外環中的'getchar'吃掉了'q'。在內部循環之前添加'putchar(ch)'來解決問題。另一方面,對於無效輸入(例如字符),'scanf(「%d」)'將失敗,並返回0,並將字符(無效輸入)留在stdin中。 –