不經意中發現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 函式的返回...