作者chienpin (安!?安個雕阿!)
看板C_and_CPP
標題[問題] 讀取txt的文章最後一個字元會多印?
時間Fri May 15 01:02:13 2009
晚安: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
1F:推 cooper6334:我猜是你的文件內容最後多按了一個Enter 05/15 01:07
2F:→ cooper6334:多了一行就多loop一次,只是為啥會抓到you我就不知了 05/15 01:09
3F:推 maplefog:do while的關係,改成while就可以了 05/15 01:13
4F:→ chienpin:解決了!謝謝樓上兩位前輩 :D 05/15 01:21
5F:→ MOONRAKER:這不是最後一個字元吧…明明就是最後一行… 05/15 10:06
6F:→ iMElLoN:這是常見的錯誤,因為 EOF在最後一次抓到,可是你沒在 get 05/15 20:58
7F:→ iMElLoN:之後檢查,所以之前吃進來的就會被多印一次,如此而已 05/15 20:59