C語言scanf 函式返回值的問題(實驗一)

2021-06-26 03:00:47 字數 1255 閱讀 5578

不經意中發現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;

當scanf函式的第乙個變數格式不正確時返回值為0,即,當scanf函式的第n個變數格式不正確時,返回值為n-1

continue:

以前學習的時候書上說的是scanf()的返回值等於得到輸入值的輸入項的個數

scnaf(格式控制,輸入項表);

照以上一般形式來看的話

main()

應該輸出2,因為就a和b兩個輸入項得到值了。

但是結果卻是3

為什麼?

這樣的話是不是應該說成得到輸入資料的格式說明的個數?

是3,因為是3個%d,輸入項的個數是3個,不過是進了緩衝區3個,兩個被賦值了,乙個扔掉了而已。

那scanf()的返回值應該是進緩衝區的資料的個數,或是說得到輸入資料的格式說明的個數,對嗎?

像這樣scanf("%d%d%d"

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

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

所以,通過scanf函式的返回值和指定輸入資料的個數(由格式符決定)的比較,可以判斷資料輸入是否成功。

就樓主的這個程式而言,是乙個錯誤的程式,會導致segmentation fault,

因為沒有有效的位址接受這個輸入的第三個數,whyglinux的解釋是正確的,

如果程式可以正常的繼續下去執行的話,返回值應該是2.

具體你的程式為什麼能夠返回,我不知道,我用的是gcc,winxp,執行的時候segmentation fault.

continue:

其實對於scanf這樣的一些庫函式其實對其來講,他們使用起來並不是很友好,比如在不同的編譯環境中,他們得到的結果數值是不一樣的

,這就需要如果我們需要在實際應用使用他們的話,就需要我們對他進行一些實際考證,這樣才可以放心使用,其實說白啦,

它的可移植性並不是很優秀吧

c語言scanf返回值

1.scanf 函式是有返回值的,它的返回值可以分成三種情況 1 正整數,表示正確輸入引數的個數。例如執行 scanf d d a,b 如果使用者輸入 3 4 可以正確輸入,返回2 正確輸入了兩個變數 如果使用者輸入 3,4 可以正確輸入a,無法輸入b,返回1 正確輸入了乙個變數 2 0,表示使用者...

C語言scanf 函式返回值的問題

不經意中發現scanf 的返回值問題,自己試驗和了解了一下,一些所知與各位分享 void main 1.scanf 函式有返回值且為int型。2.scanf 函式返回的值為 正確按指定格式輸入變數的個數 也即能正確接收到值的變數個數。從上邊的例子中可以得到驗證,這裡用變數x接收scanf 函式的返回...

C語言scanf函式的返回值問題

不經意中發現scanf 的返回值問題,自己試驗和了解了一下,一些所知與各位分享 void main 1.scanf 函式有返回值且為int型。2.scanf 函式返回的值為 正確按指定格式輸入變數的個數 也即能正確接收到值的變數個數。從上邊的例子中可以得到驗證,這裡用變數x接收scanf 函式的返回...