作者peteranny (TIN)
看板b98902HW
標題[計程] feof的問題...
時間Sun Feb 7 09:28:17 2010
我想問一個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
1F:推 telgniw:把feof判斷改到fscanf和printf中間 02/07 11:04
2F:→ peteranny:int i; 02/07 11:53
3F:→ peteranny:fscanf("%d",&i); 02/07 11:53
4F:→ peteranny:while(!feof(data)){ 02/07 11:53
5F:→ peteranny: printf("%d ",i); 02/07 11:53
6F:→ peteranny: fscanf("%d",&i); 02/07 11:54
7F:→ peteranny: } 02/07 11:54
8F:→ peteranny:是這樣嗎?? 02/07 11:54
9F:→ peteranny:可是這樣會只印出 1 2 = = 02/07 11:54
10F:推 LPH66:路人回答: 要記得feof是在讀不到資料之後才會是true 02/07 12:46
11F:推 andy74139:while後面再加一個print就會是1 2 3 了 02/07 17:34
12F:→ peteranny:這樣子改還是跟我原本的方式一樣啊 02/08 09:13
13F:→ andy74139:我是指while的外面@@ 02/08 09:36
14F:→ peteranny:對呀...如果test是"1 2 3\n"印出來還是1 2 3 3 02/08 21:52
15F:推 LoganChien:while (1) { 02/27 11:09
16F:→ LoganChien: scanf("%d", &i); 02/27 11:09
17F:→ LoganChien: if (feof(FILEPTR)) { break; } 02/27 11:10
18F:→ LoganChien: printf("%d", i); 02/27 11:10
19F:→ LoganChien:} 02/27 11:10
20F:→ peteranny:上面這個結果好像也是一樣的...txt是"1 2 3"就印成"1 2" 02/27 19:17