[問題] feof的讀檔

看板C_and_CPP作者 (官本嚕嚕咪)時間15年前 (2010/06/22 21:57), 編輯推噓2(2012)
留言14則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 用feof讀一個txt檔,不過只要txt檔標記儲存在data的結尾而不是存在按一個enter鍵(\n) 就不會得到多讀到一列<==我覺得問題所在。ps:若多讀一列,會跟最後一最相同。 希望得到的正確結果: 希望在txt檔尾巴,不管按幾個enter鍵,皆不會多讀一列 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) dev-c++ 自已的code: (請善用置底文標色功能) #include<stdio.h> #include<stdlib.h> int a,b; double A[3],B[3]; void change(void); int main(int argc,char* argv[]){ FILE *reak,*write; read = fopen(argv[1],"r"); //argv[1]就是要讀的txt檔 write = fopen(argv[2],"w"); //argv[2]就是要寫出的txt檔 if(read != NULL){ a = atoi(argv[2]); //以下這兩行為座標轉換需要用的,不需理它 b = atoi(argv[3]); while(!feof(read)){ //判別是否讀到檔尾 fscanf(read,"%lf %lf %lf",&A[0],&A[1],&A[2]);//讀取txt檔,一列三數字 chang(); //座標轉換,可以不予理會 fprintf(write,"% 10.8lf\t% 10.8lf\t% 10.8lf",B[0],B[1],B[2]); //寫出另一 txt檔 } //end while fclose(read); fclose(write); } //end if else{ printf("please check a data path\n"); } system("pause"); return 0; } //end main ========皆下來是change()的座標轉換副涵式================ 補充說明: 小弟新手,不要鞭太大力,想問各位高手,哪裡還可以做判斷可以得到若後面無數據不要 再讀了>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.66.13 ※ 編輯: ilemon 來自: 140.115.66.13 (06/22 21:58)

06/22 22:00, , 1F
善用scanf的回傳值, 不要用 eof 來做結束的判斷
06/22 22:00, 1F

06/22 22:01, , 2F
因為學長叫我用EOF來判斷,所以蠻煩腦的
06/22 22:01, 2F
※ 編輯: ilemon 來自: 140.115.66.13 (06/22 22:02)

06/22 22:04, , 3F
那就用fgetc 來判斷, ungetc 還原
06/22 22:04, 3F

06/22 23:55, , 4F
這個需求和 feof 的目的衝突...
06/22 23:55, 4F

06/22 23:55, , 5F
你學長的意思是不是 scanf(...)!=EOF ?
06/22 23:55, 5F

06/23 00:24, , 6F
哈~~還是不太會改,改成while(fgetc(read)!EOF),反而是第
06/23 00:24, 6F

06/23 00:24, , 7F
一個字讀不到,不過無多讀一列這問題
06/23 00:24, 7F

06/23 00:29, , 8F
沒有衝突阿, fgetc 是在迴圈裏面抓出來看, while條件
06/23 00:29, 8F

06/23 00:29, , 9F
不變, 要用ungetc把字元放回去
06/23 00:29, 9F

06/23 00:32, , 10F
06/23 00:32, 10F

06/23 00:37, , 11F
恩,了解, 謝謝^^。那如果我不知第一數是什麼,要怎放呢?
06/23 00:37, 11F

06/23 00:38, , 12F
想放fscanf所讀到的A[0]
06/23 00:38, 12F

06/23 00:45, , 13F
判斷是不是數字字元或是負號小數點
06/23 00:45, 13F

06/24 01:11, , 14F
謝謝LOVE大,已解決^^
06/24 01:11, 14F
文章代碼(AID): #1C8C541- (C_and_CPP)