在oj做題時while迴圈中使用scanf時,有時會出現Output Limit Exceed錯誤,弄得我很糾結,最後只能通過去掉while迴圈來避免。今天決定把根找出來,功夫不負有心人,原來有人也碰到過類似的糾結,先轉貼如下,與各位共用。
scanf("%d%d", &a, &b);
如果a和b都被成功讀入,那麼scanf的傳回值就是2
如果只有a被成功讀入,傳回值為1
如果a和b都未被成功讀入,傳回值為0
如果遇到錯誤或遇到end of file,傳回值為EOF。
不經意中發現scanf()的傳回值問題,自己實驗和瞭解了一下,一些所知與各位分享;
void main()
{
int a;
int b;
int c;
int x;
printf("請輸入三個整數:/n");
int x=scanf("%d%d%d",&a,&b,&c);
printf("%d/n%d/n",a,x);
}
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)這樣語句來判斷是否正確的給所有的變數賦值了,正確的話才能使用這個變數參與運算,這樣才能提高我們代碼的安全性,所以這個傳回值也是大有用途的。
下面是這篇文章來源:
本篇文章來源於:開發學院 http://edu.codepub.com 原文連結:http://edu.codepub.com/2009/0617/6498.php