scanf的傳回值探究

來源:互聯網
上載者:User

在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.