“測試輸入包含若干測試實例。當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函數 這么寫是最簡單的吧