1. 程式人生 > >關於while迴圈中的~scanf()

關於while迴圈中的~scanf()

可以經常在ACM程式碼中看到 while(~scanf("%d",&n)){ } 這樣的程式碼,意思是在讀到輸入結尾時迴圈也結束。

一般在讀到輸入流結尾時,scanf返回的是EOF。

EOF是在標頭檔案stdio.h中定義的常量,一般為-1。

-1 的原碼是10000001,反碼是1111110,補碼是11111111。複習一下,正數的原碼、反碼、補碼都是一樣的;負數的原碼是符號位為1,反碼是(對原碼)符號位不變、其餘位取反,補碼是(對原碼)符號位不變、其餘位取反、末位加1.

~EOF則是對EOF進行按位取反操作,則為00000000。所以while條件不滿足,迴圈結束。