ACM之while(scanf(“%d”,&n)!=EOF)

來源:互聯網
上載者:User
ACM日記-與while(scanf("%d",&n)!=EOF)的那件小事“測試輸入包含若干測試執行個體。當N為0時,輸入結束,該執行個體不被處理。”

這句話 是最早我對ACM的印象 以前也沒見過這種輸入要求 做第一道題的時候就卡住了 上網看別人的代碼 都有一句 while(scanf("%d",&n)!=EOF)

"scanf 函數還能放while裡啊... EOF是什麼玩仍兒呢..."

上網找答案吧 也沒人可問...

有人說 EOF等於-1 其實就是scanf函數的傳回值 不等於-1時 繼續進行迴圈

有人說 EOF是處理到檔案結束 不用EOF也可以

....

很多天后終於把這個弄明白了

scanf的傳回值由後面的參數決定

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

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

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

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

如果遇到錯誤或遇到end of file,傳回值為EOF。

且傳回值為int型.

驗證:

        sign=scanf("%d %d",&a,&b); 
        printf("%d %d\n",a,b); 
        printf("%d\n",sign);


但是輸入“a X”的時候 輸出的sign為0

什麼時候輸出EOF? 在stdio.h中 宏定義為-1

按照說明,scanf函數只有在第一個參數為NULL(null 指標)的情況下,才可能返回EOF,否則,返回成功格式化並賦值的參數個數(>=0)。

End Of File,在電腦的術語縮寫通常為 EOF,在作業系統決定資料源無更多的資料可讀取。


 當時這個程式就是這麼寫的:

while(scanf("%d",&n)!=EOF)

 {

   if(n==0)

  {

      break;

   }

 }

 

終於把那道題給A了... ... 

 

後來看別人的代碼 又這麼寫了

while(scanf("%d",&n)&&n!=0)


後來

whlie(scanf("%d",&n)&&n)


再後來

while(scanf("%d",&n),n)

... ...

也許用C語言 用scanf函數 這麼寫是最簡單的吧


from:http://raines8231.blog.163.com/blog/static/13623310720122269316911/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.