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(空指針)的情況下,才可能返回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函數 這么寫是最簡單的吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM