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

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