#460: 請幫幫我


sland5p (JwHu)


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


POOHccc ()


因要上傳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)


因要上傳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一樣輸入兩筆之後才計算出結果?我不懂的是程式如何判斷輸入完了?不好意思我很笨= =