status == scanf("%d", num)
scanf()讀取num的一個新值锻狗;然后檢查scanf是否成功獲取值,scanf()返回成功讀取項的數(shù)量轻纪,如果scanf()成功讀取一個整數(shù)刻帚,就把該整數(shù)存入num并返回1,隨后返回值將被賦給status(注意崇众,用戶輸入的值存在num中,不是status中)锰蓬。這樣做同時更新了num和status的值眯漩,while循環(huán)進入下一次迭代麻顶,如果用戶輸入的不是數(shù)字(如舱卡,q),scanf()會讀取失敗并返回0矫钓。此時交胚,status的值就是0
如果在scanf()在轉(zhuǎn)換值之前出了問題(例如,檢測到文件尾部或遇到硬件問題)杯活,會返回特殊值EOF(其通常被定義為-1)熬词,這個值也會引起循環(huán)終止。
在循環(huán)體中互拾,錯誤格式的輸入會導(dǎo)致程序循環(huán)一直運行著,用戶在輸入錯誤(如寄猩,需要輸入數(shù)字骑疆,但是輸入字符q)后完全沒有機會繼續(xù)輸入。如果scanf()讀取指定形式的輸入失敗泊柬,就把無法讀取的輸入留在輸入隊列總诈火,供下次讀取。當(dāng)scanf()把q作為整數(shù)讀取時失敗了冷守,它把q留下,在下次循環(huán)時教沾,scanf()從上次讀取失敗的地方(q)開始讀取,scanf()把q作為整數(shù)讀取或悲,又失敗了。因此巡语,這樣修改后不僅創(chuàng)建了一個無限循環(huán)男公,還創(chuàng)建了一個無限失敗的循環(huán),真讓人沮喪枢赔。