這段程序是,阻塞,然后等待你輸入一個整數,然后原樣輸出,然后再阻塞,如此循環。(編譯器:VS2005)#include<stdio.h>int main(){ int i; while(1)
{ puts("請輸入數字"); scanf("%d", &i); printf("以整數輸出這個值:%d\n", i);
}
}但實際上如果輸入的字母,再循環回來的時候就不會阻塞,而是會瘋狂的循環下去……百度一下,發現scanf函數會從輸入緩存(不太懂這是什么東西)中拿走一段數據,如果我輸入的是數字的話這個操作就會清空輸入緩存,當再次運行scanf函數的時候如果輸入緩存是空的,就會產生一個阻塞。然而還是不明白輸入字母的情況下發生了什么。
1 回答

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
好吧,最后還是自己找到了答案……
scanf還有一個特點就是:輸入緩存中的字符無法匹配格式化說明符的時候,會立即return掉,該緩存字符也不會被刪除。
然后配合上面說的特點:只有輸入緩存是空的的時候,才會阻塞,否則不會阻塞。
- 1 回答
- 0 關注
- 512 瀏覽
添加回答
舉報
0/150
提交
取消