C語言中while語句裡使用scanf的技巧

2021-09-28 02:52:22 字數 689 閱讀 5834

今天友人和我討論了一段**,是hdu的oj上一道題目的解,**如下

#include

return0;

}

起初,我以為**中while語句裡的按位取反運算子寫錯了,應該是邏輯非運算子。

這時我在quora上找到了類似的問題,我對其中一篇答案做了修改和翻譯:

查閱scanf函式的man手冊,關於返回值的說明如下

函式返回按照格式成功匹配並讀入的輸入項數量,並且可能會返回乙個小於輸入項總數的數字,而在匹配失敗的情況下,甚至可能返回0。

如果在第一次成功讀入或者發生匹配錯誤之前收到輸入結束訊號,將會返回eof。在遇到讀入錯誤的時候,也會返回eof。

在上面的**裡,scanf的返回值可能是0,1,2或者eof。

對0,1,2進行按位取反得到的都是非零值,此時while迴圈會繼續執行。

在大多數環境裡,eof被定義為值為-1的常量,進行按位取反後得到的值為0.此時while迴圈將會結束。

綜上所述,這個while語句可以不斷從輸入流讀入資料,直到輸入流結束,迴圈也就結束。

值得一提的是,這種用法僅僅在eof被定義為-1的環境下有效,而且可讀性很差。所以應該盡量避免使用它。

在linux和os x裡,你可以通過ctrl+d來傳送乙個輸入結束訊號,在windows裡你需要使用ctrl+z。

C語言中,while 語句中使用賦值語句

while 語句括號中是乙個邏輯表示式,用以判斷while迴圈是否需要繼續執行。可以是賦值語句。while迴圈的一般格式為 while expr body 其中用來判斷迴圈條件的expr可以是任意表示式。當其是賦值語句的時候,含義為 先執行賦值語句,然後對左值進行判斷。如果左值為0則expr為假,w...

C語言 while語句

案例 用while語句求1 100的累計和。案例 用while語句求1 100的累計和。程式功能 求1 100的累計和 main printf sum d n sum 程式運 況如下 sum 5050 1 一般格式 while 迴圈繼續條件 2 執行過程 執行過程 1 求解 迴圈繼續條件 表示式。如...

C語言中迴圈語句的使用

c語言中的迴圈語句 在c語言中,有三種型別的迴圈語句 for語句 while語句和do while語句。分別介紹如下 1.for迴圈語句 for語句格式為 for 表示式1 表示式2 表示式3 迴圈語句語句 迴圈體 該語句執行過程如下 先對表示式1賦初值 判別表示式2是否滿足給定條件,若其值為真,滿...