[問題] 讀取txt的文章最後一個字元會多印?

看板C_and_CPP (C/C++)作者 (安!?安個雕阿!)時間16年前 (2009/05/15 01:02), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串1/1
晚安:D 小弟還是初學者, 有一些問題想請教一下前輩們, 我的txt檔裡面是一篇文章, 我讓它輸出變成直式, 假設txt內容是I love you., 印出來是 I love you. 但是當我讀檔印出來時最後一個字元會重複印一次, 變成 I love you. you. 這是我的語法 #include<stdio.h> #include<stdlib.h> int main(void) { FILE *fptr; char str1[16]; fptr=fopen("c:\\Dev-Cpp\\yang.txt","r"); if(fptr!=NULL) { do { fscanf(fptr,"%s",&str1); printf("%s\n",str1); } while(!feof(fptr)); fclose(fptr); } else printf("檔案開始失敗\n"); system("pause"); return 0; } 我原本以為是feof的問題, 所以我把while(!feof(fptr));改成 int i; while((i =fgetc(fptr))!= EOF); 可是還是會重複印, 所以上來請教各位小弟的問題出在哪裡? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.4.199

05/15 01:07, , 1F
我猜是你的文件內容最後多按了一個Enter
05/15 01:07, 1F

05/15 01:09, , 2F
多了一行就多loop一次,只是為啥會抓到you我就不知了
05/15 01:09, 2F

05/15 01:13, , 3F
do while的關係,改成while就可以了
05/15 01:13, 3F

05/15 01:21, , 4F
解決了!謝謝樓上兩位前輩 :D
05/15 01:21, 4F

05/15 10:06, , 5F
這不是最後一個字元吧…明明就是最後一行…
05/15 10:06, 5F

05/15 20:58, , 6F
這是常見的錯誤,因為 EOF在最後一次抓到,可是你沒在 get
05/15 20:58, 6F

05/15 20:59, , 7F
之後檢查,所以之前吃進來的就會被多印一次,如此而已
05/15 20:59, 7F
文章代碼(AID): #1A34wNgF (C_and_CPP)
文章代碼(AID): #1A34wNgF (C_and_CPP)