我用C++输入流读取TXT文件,为什么最后一行多读了一次, 文件内容如下
文件内容如下:zwjm199109zjcomputersoftwear20111312011080611101zhyf199202zjcomputersoftwear20...
文件内容如下:
zwj m 199109 zj computer softwear 2011 1 312011080611101
zhy f 199202 zj computer softwear 2011 1 312011080611102
cxn m 199209 fj computer softwear 2011 1 312011080611103
ycx m 199204 sc computer softwear 2011 1 312011080611104
wxq f 199008 sc computer softwear 2011 1 312011080611105
hl m 199105 sc computer softwear 2011 1 312011080611106
qzk m 199105 sc computer softwear 2011 1 312011080611107
yl m 199210 sc computer softwear 2011 1 312011080611108
tjh f 198707 sc hospital madicine 2008 2 312011080611178
代码如下
while(!infile.eof())
{
infile>>na;student[i].SetDate1(na);cout<<na<<' ';
infile>>s;student[i].SetDate2(s);cout<<s<<' ';
infile>>bir;student[i].SetDate3(bir);cout<<bir<<' ';
infile>>home;student[i].SetDate4(home);cout<<home<<' ';
infile>>aca;student[i].SetDate5(aca);cout<<aca<<' ';
infile>>ma;student[i].SetDate6(ma);cout<<ma<<' ';
infile>>gra>>cla;student[i].SetDate7(gra,cla);cout<<gra<<' '<<cla<<' ';
infile>>num;student[i].SetDate8(num);cout<<num<<endl;
i++;
}
infile.close; 展开
zwj m 199109 zj computer softwear 2011 1 312011080611101
zhy f 199202 zj computer softwear 2011 1 312011080611102
cxn m 199209 fj computer softwear 2011 1 312011080611103
ycx m 199204 sc computer softwear 2011 1 312011080611104
wxq f 199008 sc computer softwear 2011 1 312011080611105
hl m 199105 sc computer softwear 2011 1 312011080611106
qzk m 199105 sc computer softwear 2011 1 312011080611107
yl m 199210 sc computer softwear 2011 1 312011080611108
tjh f 198707 sc hospital madicine 2008 2 312011080611178
代码如下
while(!infile.eof())
{
infile>>na;student[i].SetDate1(na);cout<<na<<' ';
infile>>s;student[i].SetDate2(s);cout<<s<<' ';
infile>>bir;student[i].SetDate3(bir);cout<<bir<<' ';
infile>>home;student[i].SetDate4(home);cout<<home<<' ';
infile>>aca;student[i].SetDate5(aca);cout<<aca<<' ';
infile>>ma;student[i].SetDate6(ma);cout<<ma<<' ';
infile>>gra>>cla;student[i].SetDate7(gra,cla);cout<<gra<<' '<<cla<<' ';
infile>>num;student[i].SetDate8(num);cout<<num<<endl;
i++;
}
infile.close; 展开
4个回答
展开全部
因为你是先判断,然后读取数据的。
eof()这个函数是在读取失败的时候才为true的,所以读到最后一行的时候,eof()的值还是0,于是又再次进入循环里了,一执行这句infile>>na;时,读取失败,eof()为1,由于读取失败,na里的数值就没有变,以下的那些变量也是这个道理,所以就多输出一行了。
你可以用do while 语句。最好之前能判断文件是否为空。
eof()这个函数是在读取失败的时候才为true的,所以读到最后一行的时候,eof()的值还是0,于是又再次进入循环里了,一执行这句infile>>na;时,读取失败,eof()为1,由于读取失败,na里的数值就没有变,以下的那些变量也是这个道理,所以就多输出一行了。
你可以用do while 语句。最好之前能判断文件是否为空。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一边读取一边输出这个结构不太好吧,每行读取完成后再输出则可以在输出前加入一个判断:
if (infile.fail())
{
break;
}
if (infile.fail())
{
break;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
file 多一行空的?
while 是先判断是否为空 如果你多一行空白 他还是会执行阿 ==
while 是先判断是否为空 如果你多一行空白 他还是会执行阿 ==
更多追问追答
追问
还是没理解好多一行空白的意思,我文件里没有空白....那觉得该怎么改才好呢?
追答
改用for控制 看结果对不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询