[計程] feof的問題...

看板b98902HW作者 (TIN)時間16年前 (2010/02/07 09:28), 編輯推噓4(4016)
留言20則, 5人參與, 最新討論串1/2 (看更多)
我想問一個c的問題... 我寫了一個很簡單的程式 #include<stdio.h> #include<stdlib.h> int main(){ FILE*data=fopen("test.txt","r"); while(!feof(data)){ int i; fscanf(data,"%d",&i); printf("%d ",i); } system("pause"); return 0; } ((也就是從test.txt讀一個字 印一個字的意思 如果test.txt的內容是 1 2 3 那麼印出就是 1 2 3 很正常沒錯 可是如果test.txt的內容是 1 2 3 ((這裡有多一行換行 那麼印出來就是 1 2 3 3 啊這是三小!!=口=為什麼?? 請強者幫忙解答...因為小弟最近幫人寫程式遇到這個問題囧 是只要檔案的最後有空白行就會有這種bug嗎??不然要怎麼解決?? 謝謝回答的人!!Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.71.78.252

02/07 11:04, , 1F
把feof判斷改到fscanf和printf中間
02/07 11:04, 1F

02/07 11:53, , 2F
int i;
02/07 11:53, 2F

02/07 11:53, , 3F
fscanf("%d",&i);
02/07 11:53, 3F

02/07 11:53, , 4F
while(!feof(data)){
02/07 11:53, 4F

02/07 11:53, , 5F
printf("%d ",i);
02/07 11:53, 5F

02/07 11:54, , 6F
fscanf("%d",&i);
02/07 11:54, 6F

02/07 11:54, , 7F
}
02/07 11:54, 7F

02/07 11:54, , 8F
是這樣嗎??
02/07 11:54, 8F

02/07 11:54, , 9F
可是這樣會只印出 1 2 = =
02/07 11:54, 9F

02/07 12:46, , 10F
路人回答: 要記得feof是在讀不到資料之後才會是true
02/07 12:46, 10F

02/07 17:34, , 11F
while後面再加一個print就會是1 2 3 了
02/07 17:34, 11F

02/08 09:13, , 12F
這樣子改還是跟我原本的方式一樣啊
02/08 09:13, 12F

02/08 09:36, , 13F
我是指while的外面@@
02/08 09:36, 13F

02/08 21:52, , 14F
對呀...如果test是"1 2 3\n"印出來還是1 2 3 3
02/08 21:52, 14F

02/27 11:09, , 15F
while (1) {
02/27 11:09, 15F

02/27 11:09, , 16F
scanf("%d", &i);
02/27 11:09, 16F

02/27 11:10, , 17F
if (feof(FILEPTR)) { break; }
02/27 11:10, 17F

02/27 11:10, , 18F
printf("%d", i);
02/27 11:10, 18F

02/27 11:10, , 19F
}
02/27 11:10, 19F

02/27 19:17, , 20F
上面這個結果好像也是一樣的...txt是"1 2 3"就印成"1 2"
02/27 19:17, 20F
文章代碼(AID): #1BRXSpGi (b98902HW)
討論串 (同標題文章)
文章代碼(AID): #1BRXSpGi (b98902HW)