[問題] feof() & IO Redirection

看板C_and_CPP (C/C++)作者 (新生活!~)時間13年前 (2012/12/26 12:47), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc, linux 問題(Question): #include<stdio.h> int main(void){ { FILE *fp; fp=fopen("a.dat", "r"); int x,y; while(!feof(fp)){ fscanf(*fp, "%d%d\n", &x,&y); printf("%05d %05d\n", x,y); } retunrn 0; } 以上是我的程式,會把a.dat每行的兩個整數逐行%05d列出 今天想要用bash的 < 來指定輸入檔而不要寫入程式內 #include<stdio.h> int main(void){ { int x,y; while(!feof){ scanf("%d%d\n", &x,&y); printf("%05d %05d\n", x,y); } retunrn 0; } 以上的程式碼可以compile,但是執行./a.out < a.dat後沒有輸出產生 但如果把while(!feof)改成while(feof) 則可得到跟第一個程式一樣的結果 為什麼第一種方法要用!feof,第二種方法卻要用feof ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.103.226 ※ 編輯: sinlin 來自: 140.109.103.226 (12/26 12:48) ※ 編輯: sinlin 來自: 140.109.103.226 (12/26 12:48)

12/26 13:15, , 1F
因為你第二個方式弄錯了 要用 !feof(stdin)
12/26 13:15, 1F

12/26 13:15, , 2F
不過 feof 一般是用在讀取 (*scanf) 之後的
12/26 13:15, 2F

12/26 13:16, , 3F
因為 feof 只有在前一個讀取讀不到東西時會回傳 true
12/26 13:16, 3F

12/26 13:17, , 4F
你應該可以發現印出來的資料最後一筆多重覆一次就是這個原因
12/26 13:17, 4F

12/26 13:20, , 5F
瞭解了,謝謝
12/26 13:20, 5F
文章代碼(AID): #1Gse5nKn (C_and_CPP)
文章代碼(AID): #1Gse5nKn (C_and_CPP)