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/