3 回答

TA貢獻1834條經(jīng)驗 獲得超8個贊
如:
scanf("%d,%d", &a, &b);
如果a和b都被成功讀入,那么scanf的返回值就是2
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為EOF。
你上邊的兩個都是看返回值來判斷的 至于while(~scanf("%d",&n)) 沒用過
t>>=1 即t = t >> 1 右移一位 再賦值

TA貢獻1810條經(jīng)驗 獲得超5個贊
知識1:只有-1取反(~-1)是0
知識2:scanf讀入到EOF時返回-1
所以,while(~scanf)就是不斷讀取執(zhí)行循環(huán),直到eof(
和while(scanf("%d",&n)!=EOF)一個意思
)。一般這種用法在oj(確保數(shù)據(jù)正確)上使用,平常真的用不到

TA貢獻1853條經(jīng)驗 獲得超6個贊
最后一個簡單
就是t = t>>1;右移一位操作.相當(dāng)于除以2.
scanf的返回值是正確讀入的元素個數(shù),后面那個while(~...)沒見過,但是意義很明顯,正常情況是返回1,~表示按位取反,對1取反,這樣其實沒有多少實際意義.
scanf!=EOF常常用于判斷是否結(jié)束輸入( ctrl+Z(windows下)或者ctrl+D(unix下) )
while(scanf)即表示根據(jù)正確讀入變量個數(shù)判斷是否結(jié)束輸入,這常常會出意想不到的出錯.
簡單實驗一下應(yīng)該可以得到較滿意的答案.
- 3 回答
- 0 關(guān)注
- 559 瀏覽
添加回答
舉報