scanf 函式的說明

2021-06-01 13:09:50 字數 2095 閱讀 4116

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 是不是感覺是乙個非常簡單的程式。但有時候不懂也是...