在一般的 c 入門書籍中介紹輸入輸出函式時,總是會拿scanf和printf函式來舉例。這裡主要說下scanf函式的一些事情。
1. 標頭檔案
scanf與printf函式一樣,都被定義在標頭檔案stdio.h裡,因此在使用scanf函式時要加上
#include 。
2. 函式原型
int scanf(const char *format,...);
函式 scanf() 是從標準輸入流stdio (標準輸入裝置,一般是鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應位址的變數中。
3. 返回值
scanf()函式返回成功賦值的資料項數,讀到檔案末尾出錯時則返回eof。如
scanf("%d%d",&a,&b);
如果a和b都被成功讀入,那麼返回值就是2;如果只有a被成功讀入,返回值為1;如果a和b都未被成功讀入,返回值為0;如果遇到錯誤或遇到end of file,返回值為eof。
為什麼要慎用scanf()呢?
首先,是輸入格式要求高。在輸入流中,資料項必須由空格、製表符和新行符分割。逗號和分號等不是分隔符,比如上面的**,將接受輸入5 10,但輸入5,10則失敗。
其次,scanf()自身實現的問題。scanf()不是以行單位對輸入內容進行解釋,而是對連續字元流進行解釋(換行字元也視為乙個字元)。scanf()連續地從流讀入字元,並且對和格式說明符(%d)相匹配的部分進行變換處理。例如,當格式說明符為%d 的時候,輸入
123(回車)
scanf()函式從流中取得 123 部分的內容,並對它進行處理。換行符依舊會殘留在流中。因此,在c**中需要使用乙個後續的 getchar()來吞食這個留下的換行符。
scanf()在讀入過程中有幾個物件被成功地變換,則 scanf()的返回值就為幾。如果做一下錯誤檢查,可能有人會寫出下面的**:
while (scanf("%d", &hoge) != 1)
替代scanf的方法
使用fgets()和 sscanf()組合方式來進行替代。如下:
int hoge;
char buf[256];
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &hoge);
替代之後,在使用者輸入的一串字元中,匹配第乙個遇到的整數,賦值給hoge。 如何使用scanf函式?
問題二問題三 問題四補充 是通用終端格式化輸入函式,它從標準輸入裝置 鍵盤 讀取輸入的資訊。可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。其呼叫格式為 scanf 格式化字串 位址表 scanf 函式接收輸入資料時,遇以下情況結束乙個資料的輸入 不是結束該scanf函式,scanf函式...
關於Scanf函式的使用!
這裡講一下我自己在程式設計過程中的例子 2.截圖太麻煩,直接打程式了 應當注意的是 如果在 格式控制字串 中除了格式宣告外還有其他字元,那麼需在輸入資料時對應的位置上字元要保持一致 例如scanf a f,b d n a,b 則需輸入a 1,b 2 而不是直接輸入1 2,會導致錯位結果不理想 3.當...
使用scanf函式遇到的問題
用c語言寫乙個程式,實現線性列表的一些操作,輸入相應的命令執行相對的操作,為了簡潔主要的命令有建立列表命令c 列印列表命令p,退出程式命令e。如下 list.h 標頭檔案 typedef struct node 這裡的list是乙個student結構體列表 list list create void...