scanf的返回值由後面的引數決定,且返回值為int型
返回值表示成功讀入的資料的個數,如:scanf("%d%d", &a, &b);
如果a和b都被成功讀入,那麼scanf的返回值就是2;
如果只有a被成功讀入,返回值為1;
如果a和b都未被成功讀入,返回值為0;
如果遇到錯誤或遇到end of file,返回值為eof。 .
1、scanf()中的變數必須使用位址。
2、scanf()的格式控制串可以使用空白字元或其它非空白字元,使用空白字元會使scanf()函式在讀操作中略去輸入中的乙個或多個空白字元。使用非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。
3、在用"%c"輸入時,空格和「轉義字元」均作為有效字元。
scanf()函式不能正確接受有空格的字串?如: i love you!
#includevoid main()
; printf("please input your name\n");
scanf("%s", name);
printf("your name is %s\n", name);
}
輸出:please input your name
bai yonghui
your name is bai
scanf()函式接收輸入資料時,遇以下情況結束乙個資料的輸入:(不是結束該scanf函式,scanf函式僅在每乙個資料域均有資料,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵;
② 遇寬度結束;
③ 遇非法輸入;
所以,上述程式並不能達到預期目的,scanf()掃瞄到"bai"後面的空格就認為對name的賦值結束,並忽略後面的"yonghui"。
這裡要注意是"yonghui"還在stdin流中
解決方法:
scanf()函式還有乙個 "%" 格式控制符(如果對%不了解的請檢視博文:"scanf()函式的幾個常見問題"
),請看下面的程式:
#includevoid main()
; printf("please input your name\n");
scanf("%[^\n]", name);
printf("your name is %s\n", name);
}
補充
fflush(stdin)這個方法在gcc下不可用。(在vc6.0下可以)
以下是 c99 對 fflush 函式的定義:int fflush(file *stream);
注意:stdin 標準輸入流,可以直接使用該名稱作引數
如果stream指向輸出流或者更新流(update stream),並且這個更新流最近執行的操作不是輸入,那麼fflush函式將把任何未被寫入的資料寫入stream指向的檔案(如標準輸出檔案stdout)。否則,fflush函式的行為是不確定的。
c和c++的標準裡從來沒有定義過 fflush(stdin)。
fflush(null)清空所有輸出流和上面提到的更新流。
如果發生寫錯誤,fflush()函式會給那些流打上錯誤標記,並且返回eof,否則返回0。
由此可知,如果 stream 指向輸入流(如 stdin),那麼 fflush 函式的行為是不確定的。故而使用fflush(stdin) 是不正確的,至少是移植性不好的。
可採用如下方法:
方法一:
此函式可以和scanf()函式一起使用,但使用%c輸入時要注意,即此函式只能用於緩衝區非空的情況
#include void flush()
int main()
方法二:使用getchar()代替fflush(stdin)
發展
使用scanf函式進行輸入,必須指定輸入的資料的型別和格式,不僅繁瑣複雜,而且很容易出錯。c++保留scanf()只是為了和c相容,以便過去用c語言寫的程式可以在c++的環境下執行。c++的程式設計人員都願意使用cin進行輸入,很少使用scanf。
scanf 函式的原理
scanf 函式的原理 想象輸入裝置 鍵盤 連線著乙個叫 緩衝 的東西,把緩衝認為是乙個字元陣列。當你的程式執行到scanf時,會從你的緩衝區讀東西,如果緩衝區是空的,就阻塞住,等待你從鍵盤輸入。現在假設你的緩衝區裡有 abcd n1234 n 其中 n是回車符 執行 scanf s name 的時...
scanf函式的應用
函式名 scanf 功 能 執行格式化輸入 用 法 int scanf char format argument,scanf 函式是通用終端格式化輸入函式,它從標準輸入裝置 鍵盤 讀取輸入的資訊。可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。其呼叫格式為 scanf 格式化字串 位址表...
scanf函式的輸入
是不是也有人和我一樣,有時候輸入達不到自己預想結果呢?又很難找到自己的錯誤,覺得輸入的格式是對的,但是儲存卻不再在自己預想的位置。下面來講一下我關於字元和數字輸入的順序和方式的認識。首先我們來看第乙個 include includevoid main 是不是感覺是乙個非常簡單的程式。但有時候不懂也是...