#460: 請幫幫我


sland5p (JwHu)

學校 : 東南科技大學
編號 : 2322
來源 : [123.51.217.99]
最後登入時間 :
2015-10-23 11:36:04
a003. 兩光法師占卜術 | From: [60.251.148.162] | 發表日期 : 2008-08-12 16:04

因要上傳CODE似乎都要加上這行while( scanf("%d %d",&M, &D) !=EOF) {,但我不知道何時該 == EOF何時該 !=EOF 還釋==2 有誰能幫我解釋一下,感恩.. 
#461: Re:請幫幫我


POOHccc ()

學校 : 國立臺中技術學院
編號 : 1139
來源 : [220.135.97.253]
最後登入時間 :
2012-02-04 21:23:42
a003. 兩光法師占卜術 | From: [220.135.97.253] | 發表日期 : 2008-08-13 06:33

因要上傳CODE似乎都要加上這行while( scanf("%d %d",&M, &D) !=EOF) {,但我不知道何時該 == EOF何時該 !=EOF 還釋==2 有誰能幫我解釋一下,感恩..



程式一:EOF

#include <stdio.h>

main(){
    printf("%d\n",EOF);
}

輸出結果:-1

所以可以得知EOF=-1

 

程式二(輸入檔:input.txt):

#include <stdio.h>

main(){
    freopen("input.txt","r",stdin);
    printf("%d\n",scanf("%d%d"));
}

 

  1. 當input.txt為「11」,則該程式輸出1
  2. 當input.txt為「11 22」,則該程式輸出2
  3. 當input.txt為「」空內容時,則該程式輸出-1


所以當int argcnt=scanf("%d%d%d%d ... %d",&a,&b,&c,&d, ...),

 若argcnt=-1,代表沒有讀入任何資料

 若argcnt=1,代表讀入1筆資料

 若argcnt=2,代表讀入2筆資料

 ...

 若argcnt=n,代表讀入n筆資料

 

這樣應該就可以看出為什麼要 while( scanf("%d %d",&M, &D) !=EOF) 了吧

不過我比較偏好使用 while( scanf("%d%d",&M, &D) == 2)

因為可能實際上只讀入1筆資料(可是實際上要讀入2筆資料至M、D),卻因為剛好!=EOF(-1),而執行while內容的程式碼

 
#462: Re:請幫幫我


sland5p (JwHu)

學校 : 東南科技大學
編號 : 2322
來源 : [123.51.217.99]
最後登入時間 :
2015-10-23 11:36:04
a003. 兩光法師占卜術 | From: [60.251.148.162] | 發表日期 : 2008-08-13 13:24

因要上傳CODE似乎都要加上這行while( scanf("%d %d",&M, &D) !=EOF) {,但我不知道何時該 == EOF何時該 !=EOF 還釋==2 有誰能幫我解釋一下,感恩..



程式一:EOF

#include <stdio.h>

main(){
    printf("%d\n",EOF);
}

輸出結果:-1

所以可以得知EOF=-1

 

程式二(輸入檔:input.txt):

#include <stdio.h>

main(){
    freopen("input.txt","r",stdin);
    printf("%d\n",scanf("%d%d"));
}

 

  1. 當input.txt為「11」,則該程式輸出1
  2. 當input.txt為「11 22」,則該程式輸出2
  3. 當input.txt為「」空內容時,則該程式輸出-1


所以當int argcnt=scanf("%d%d%d%d ... %d",&a,&b,&c,&d, ...),

 若argcnt=-1,代表沒有讀入任何資料

 若argcnt=1,代表讀入1筆資料

 若argcnt=2,代表讀入2筆資料

 ...

 若argcnt=n,代表讀入n筆資料

 

這樣應該就可以看出為什麼要 while( scanf("%d %d",&M, &D) !=EOF) 了吧

不過我比較偏好使用 while( scanf("%d%d",&M, &D) == 2)

因為可能實際上只讀入1筆資料(可是實際上要讀入2筆資料至M、D),卻因為剛好!=EOF(-1),而執行while內容的程式碼


那像 a003這題我都打好程式碼了,但我執行時一定要像題目內的sample input/output一模一樣嗎?連續輸入兩筆不同行然後在印出結果?

還有最後一個問題...!=EOF(-1),那什麼時候scanf會變-1?按下enter?如果是按下enter那我要如何像 sample input/output一樣輸入兩筆之後才計算出結果?我不懂的是程式如何判斷輸入完了?不好意思我很笨= =

 
ZeroJudge Forum