c++读取文本文件为什么总会多读最后一行?求高手指教!!!

voidreadfile()//读取文件{Goodsg;//创建书本对象stringgoodname;//书名inttotalnum;//库存intsoldnum;//销... void readfile()//读取文件
{
Goods g;//创建书本对象
string goodname;//书名
int totalnum;//库存
int soldnum;//销售量
ifstream fin("d:\\goods.txt");
do{
if(!fin)
break;
if(fin.eof())
break;
fin>>goodname
>>totalnum
>>soldnum;
g.goodname=goodname;
g.totalnum=totalnum;
g.soldnum=soldnum;
goodvector.push_back(g);
}while(true);
fin.close();
}
求大神修改一下!
展开
 我来答
qiminixi
2012-10-09 · TA获得超过819个赞
知道小有建树答主
回答量:552
采纳率:0%
帮助的人:238万
展开全部
文件的最后一个字符是文件结束符,隐藏的,就像字符数组的'\0'。假如文件中有“1,2,3,4”四个数字,读到4的时候,eof()判断出这不是文件结束符,因此返回0,再读一个字符,发现到头了,读到了文件结束符,cin不读入任何数据,eof()返回1。这和文件指针的工作方式有关,读完了4它还是指在4上,在读一个字符文件指针才往后挪到文件结束符上。多读一行的话你减掉就可以了。
更多追问追答
追问
不是很清楚啊。能不能在我的代码里修改一下呢?
追答
你给的代码不全,我也不好修改。可以的话将代码发送至qiminixi@163.com,我帮你看看。
沧海雄风2009
2012-10-09 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2821万
展开全部
这个很简单 解决过很多此类问题了

文件读写 和折腾字符串本人比较擅长

有两种方法可以解决

1 修改程序

判断如果长度小于3 并且第一个是\n的忽略

2 修改文本内容格式

在空行回车处 向上删除一下

例如

11111
22222
33333
光标在这里

按一下删除

111111
222222
333333光标这里
追问
第二种方法我知道,我想知道的是怎么修改程序,能说清楚一定吗?
追答
如果此行第一个字符是\n 那么不要再次赋值
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
frankxieke
2012-10-09 · 计算机专业相关文档分享
frankxieke
采纳数:104 获赞数:253

向TA提问 私信TA
展开全部
什么意思啊??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式