关于C++程序的ifstream和ofstream,为什么输出135799呢?

#include<iostream>#include<fstream>usingnamespacestd;intmain(){inti;ofstreamftxt1;//默... #include <iostream >
#include <fstream >
using namespace std;

int main() {
int i;
ofstream ftxt1;//默认以输出方式打开文件 ,是从内存到硬盘
ftxt1.open("xt1.txt",ios::out);//文件以输出方式打开(内存数据输出到文件)
for(i=0; i<10; i++)
ftxt1<<i<<' ' ;
ftxt1.close();

ifstream ftxt2;//默认以输出方式打开文件 ,是从硬盘到内存
ftxt2.open("xt1.txt",ios::in);
while(!ftxt2.eof()) {//end of file的缩写,表示"文字流"(stream)的结尾
ftxt2 >>i>>i;
cout <<i << endl;
}
ftxt2.close();
return 0;
}
关于C++程序的ifstream和ofstream,为什么输出135799呢?
展开
 我来答
格里编程办公技巧
科技发烧友

2021-09-30 · 编程、办公知识分享与学习
格里编程办公技巧
采纳数:434 获赞数:879

向TA提问 私信TA
展开全部

从代码看,写入文件是把从0到9数字写入文件,每个数字用空格隔开,其中特别注意最后一个数字9后面会有一个空格

读取文件时

ftxt2 >>i>>i;这里后一个输入会覆盖前面的值所以读取的是奇数数字,当读取到9后,因为文件后面还有空格,所以不会触发end of life,继续执行while内部语句,此时读取会失败,因为后面没有数字了,但是cout<<i还会执行,输出的是之前的数字9,所以9出现了两次。

White_MouseYBZ
2021-09-30 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6674万
展开全部

显然是函数eof()用得不妥。eof()并不读文件,而是检查刚刚发生的读文件动作是否越过了文件尾。在第一次进入while时还没有发生读文件动作,eof()检查谁呢?所以就把这个不匹配一直转移到了读文件结束处,在那里得到了不希望的结果。有两种修改办法:

  1. 在while前加一句ftxt2 >>i>>i;,让第一次执行!ftxt2.eof()时已经读过文件了。为了“读一次,eof()一次”,得把while“体”中的ftxt2 >>i>>i;和cout <<i << endl;的先后次序对调。即写成:ftxt2 >>i>>i; while(!ftxt2.eof()) {cout <<i << endl; ftxt2 >>i>>i;}

  2. 把whie“体”中的ftxt2 >>i>>i移到while括号中的!ftxt2.eof()前用逗号隔开。也就是把“体”中的ftxt2 >>i>>i;删除,而在!ftxt2.eof()前加写ftxt2 >>i>>i,。即写成:while(ftxt2 >>i>>i.!ftxt2.eof()) {cout <<i << endl;}

保证成功!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式