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

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