scanf 函式問題

2021-06-20 03:34:05 字數 976 閱讀 2659

今晚研究一下scanf函式(大部分內容**於c語言中文網中《c語言常見問題集

》我只不過是做了綜合)

1、首先,傳給scanf的必須是指標,對於每個值,scanf都會寫入指標所值的位置,所以必須加&,在寫程式時候經常會忘記。

2、scanf 函式的返回值反映的是按照指定的格式符正確讀入的資料的個數。

如果輸入資料與指定格式不符,則會產生輸入錯誤。遇到輸入錯誤,scanf函式會立即終止,返回已經成功讀取的資料的個數。

但是問題是在scanf() 轉換數字的時候, 它遇到的任何非數字字元都會終止轉換並被保留 在輸入流中,這一功能的設計**於在掃瞄任意長度的數字或字元時,只有讀到超越位置才能知道已結束,故scanf會把不符合格式的字元儲存到輸入流中用於檢測是否結束。因此, 除非採用了其它的步驟, 那麼未預料到的非數字輸入會不斷 「阻塞」 scanf(): scanf() 永遠都不能越過錯誤的非數字字元而處理後邊的合法數字 字元。

int main()

}

這段**中採用了scanf()的返回值,但是,如果由於偶爾的錯誤,輸入某個非數字量後,則會陷入無限迴圈中

3、scanf("%d",&a)中%d 會扔掉前面的空白,而加上格式格式串後,如scanf("%d\n",&a)中的\n則會使scanf()讀到非空白字元為止,即會造成

int main()

執行結果

事實上,scanf()是設計為自由格式輸入的,即「%d%d%d」既可以用1 2 3 讀入,也可以用1 \n  2\n 3\n 讀入

4、空格會作為乙個字元被getchar()函式讀入,而不會被scanf()讀入

5、單純從詞意上講 scanf = scan formatted ,可以看出scanf用於格式化的輸入,故易出錯,一旦水平到了高階,應避免使用。

Scanf函式的輸入問題

scanf 怎樣讀取輸入?scanf 開始讀取輸入以後,會在遇到的第乙個空白字元空格 blank 製表符 tab 或者換行符 newline 處停止讀取。假定使用了乙個 d說明符來讀取乙個整數。scanf 函式開始每次讀取乙個輸入字元,它跳過空白字元 空格 製表符和換行符 直到遇到乙個非空白字元。因...

使用scanf函式遇到的問題

用c語言寫乙個程式,實現線性列表的一些操作,輸入相應的命令執行相對的操作,為了簡潔主要的命令有建立列表命令c 列印列表命令p,退出程式命令e。如下 list.h 標頭檔案 typedef struct node 這裡的list是乙個student結構體列表 list list create void...

詳解scanf函式

函式名 scanf 功能 執行格式化輸入 用法 int scanf char format argument,scanf 函式是通用終端格式化輸入函式,它從標準輸入裝置 鍵盤 讀取輸入的資訊。可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。其呼叫格式為 scanf 格式化字串 位址表 s...