5 回答

onemoo
TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊
前面 望遠(yuǎn) 的回答說明的是這個代碼的意圖。
我想提醒下:這樣用取反 ~ 運算符來判斷是否為 EOF 的方法是不合適的!
很多人認(rèn)為 EOF 的值是 -1,在很多平臺上這個值也確實是 -1。但是,C 標(biāo)準(zhǔn)實際上只是規(guī)定 EOF 值為負(fù) int 值!并沒有說它一定是 -1!!
所以,有可能在某些平臺上 EOF 值并非 -1,這樣這個方法就無法判斷是否讀取到 EOF 了。
C 標(biāo)準(zhǔn)定義了一個宏 EOF 來表示 End Of File。所以推薦且安全的做法是用 EOF 來作比較:
scanf("%d?%d",&a,&b) == EOF

望遠(yuǎn)
TA貢獻(xiàn)1017條經(jīng)驗 獲得超1032個贊
scanf函數(shù)返回成功讀入的數(shù)據(jù)項數(shù),讀入數(shù)據(jù)時遇到了“文件結(jié)束”則返回EOF。 scanf("%d?%d",&a,&b);???? 函數(shù)返回值為int型。如果a和b都被成功讀入,那么scanf的返回值就是2; 如果只有a被成功讀入,返回值為1; 如果a和b都未被成功讀入,返回值為0; 如果遇到錯誤或遇到end?of?file,返回值為EOF。end?of?file為Ctrl+z?或者Ctrl+d。 其中EOF的值為-1
也就是說scanf返回值的取值范圍是大于等于-1的整數(shù)只有返回值為EOF時?其取反的的值?即while循環(huán)的判斷條件才為0?才能結(jié)束循環(huán) (-1的補碼表示全是1,按位取反后全是0,即為假)其它輸入情況下(無論是否輸入成功)?while循環(huán)的判斷條件為非0?即為真

- 5 回答
- 0 關(guān)注
- 5096 瀏覽
添加回答
舉報
0/150
提交
取消