關於eof和scanf返回值

2021-07-10 05:11:10 字數 1310 閱讀 6077

eof不是乙個字元或者數字什麼的,而是scanf()函式的乙個返回值。

所以scanf("%c",&c);再判斷(c==eof)的做法是無效的,因為scanf()根本不會把eof當作乙個字元寫進c;

正確的判斷條件應該寫作以下形式

(scanf("%c",&c)==eof)

可以看出eof就是scanf()的返回值

下面提供用getchar()和scanf()寫的兩種版本的**

1.#include

void main()

char c[1000];

int cpoint=0;

while (scanf("%c",&c[cpoint])!=eof) 2.

#include

#include

void main()

char c[1000];

int cpoint=0;

while ((c=getchar())!=eof)

關於要按兩次ctrl+z的問題

這和scanf的讀取機制有關:就是在輸入流中如果存在有可讀的字元,ctrl+z就不會存放進輸入緩衝區。

這個暫時沒有辦法解決,不過應該不是大問題

2 scanf返回值的問題

scanf("%d%d", &a, &b);

如果a和b都被成功讀入,那麼scanf的返回值就是2

如果只有a被成功讀入,返回值為1

如果a和b都未被成功讀入,返回值為0

如果遇到錯誤或遇到end of file,返回值為eof。

不經意中發現scanf()的返回值問題,自己試驗和了解了一下,一些所知與各位分享;

void main()

1.scanf()函式有返回值且為int型。

2.scanf()函式返回的值為:正確按指定格式輸入變數的個數;也即能正確接收到值的變數個數。

從上邊的例子中可以得到驗證,這裡用變數x接收scanf()函式的返回值,並輸出顯示出來。當執行中輸入三個整數:5 6 7則x的值為3;如果輸入5 6 d(即給c 賦值不正確)則x的值為2;如果輸入5 t d(即給b和c 賦值不正確)則x的值為1;如果輸入d 5 2 則輸出-858993460和0,也就是說第乙個字元d輸入錯誤,整個scanf沒有收到輸入值。

其實scanf()的返回值對我們來說也很有用的,比如我們在使用這個函式進行接收值時,我們很必要知道對要給賦值的變數是否正確的賦值成功了,所以可以使用if(scanf("%d,%d",&a,&b)==2)這樣語句來判斷是否正確的給所有的變數賦值了,正確的話才能使用這個變數參與運算,這樣才能提高我們**的安全性,所以這個返回值也是大有用途的

文章出處:diy部落(

關於scanf 函式返回值及EOF

scanf 函式返會乙個整數值,該值等於scanf 成功讀取的項數或者eof include intmain void 若輸入為兩個數,則輸出 2 不是int型,會強制轉化為int型 若輸入為 2 s,則輸出為1 即成功讀入一項 若輸入為 s s,則輸出為0 即成功讀入0項 eofeof end o...

關於scanf的返回值

在a題的時候,我們經常會在while 語句中寫scanf的返回值,例如while scanf d x 1 這樣的語句,今天我們就來說關於scanf的返回值問題。眾所周知scanf 返回的是輸入個數,但當輸入不匹配或者格式化引數與實參不匹配時,scanf又是如何返回引數值的,我們來研究研究 我們先看如...

scanf 的的返回值

在c語言中scanf 函式主要是用來讀入函式的值,比如語句scanf d num scanf函式讀入乙個值,並把它儲存到num中。scanf 函式成功讀取乙個專案,它就會返回值1 如果它沒有讀取任何專案 當它期望乙個數字而你鍵入的卻是了乙個非數字的字元或者字串就會發生這種情況 scanf 聚會返回值...