作者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