C++读写文本文件时的问题

lly365 2006-04-12 04:40:10
有如下代码:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
const char filename[] = "mytext.txt";
ofstream o_file;
ifstream i_file;
string out_text;

//写
o_file.open(filename);
for (int i = 1; i <= 10; i++)
{
o_file << "第" << i << "行\n"; //将内容写入到文本文件中
}
o_file.close();

//读
i_file.open(filename);
if (i_file.is_open())
{
while (i_file.good())
{
i_file >> out_text; //将读取的内容存储到变量out_text中
cout << out_text << endl; //在控制台输出读取的内容。为什么最后一行的内容会出现两次
}
}
else
cout << "打开文件:" << filename << " 时出错!";
i_file.close();

system("PAUSE");
return 0;
}

为什么总会将最后一行显示两遍?我的循环似乎没错呀。

...全文
259 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_77 2006-04-13
  • 打赏
  • 举报
回复
都说对了。

do
{
// do...
}while (!i_file.eof());
dx30611 2006-04-13
  • 打赏
  • 举报
回复
当写入文件完成后,文件中最后一个字符是回车,
当读文件时读到第十行时文件还没有结束(因为回车),所以i_file.good是true,所以就再读一次
但是i_file>>out_text是忽略空格,制表符和回车的,所以out_text没有被覆盖,还是原来的数,所以就再输出了一次,然后才检测到文件尾.
但是在VC下不会出现这个问题
jixingzhong 2006-04-12
  • 打赏
  • 举报
回复
到文件末尾的时候需要再执行一次,
才能得到文件结束信息 ...

于是最后的内容写了两次 ~
jixingzhong 2006-04-12
  • 打赏
  • 举报
回复
i_file >> out_text; //将读取的内容存储到变量out_text中
cout << out_text << endl; //在控制台输出读取的内容。为什么最后一行的内容会出现两次
==========================
文件末尾的判断问题 ~

fangrk 2006-04-12
  • 打赏
  • 举报
回复
while (i_file.good())
{
i_file >> out_text; //将读取的内容存储到变量out_text中
cout << out_text << endl; //在控制台输出读取的内容。为什么最后一行的内容会出现两次
}

修改为:
while (i_file>>out_text)
{
cout << out_text << endl; //在控制台输出读取的内容。为什么最后一行的内容会出现两次
}
YFY 2006-04-12
  • 打赏
  • 举报
回复
楼主,你用了什么调试的?

我用VC6.0显示都是对的啊。
sankt 2006-04-12
  • 打赏
  • 举报
回复
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
const char filename[] = "mytext.txt";
ofstream o_file;
ifstream i_file;
string out_text;

//写
o_file.open(filename);
for (int i = 1; i <= 10; i++)
{
o_file << "第" << i << "行"<<endl; //
}
o_file.close();

//读
i_file.open(filename);
if (i_file.is_open())
{
while(getline(i_file,out_text))
{
//i_file >> out_text;
cout << out_text << endl;
}
}
else
cout << "打开文件:" << filename << " 时出错!";
i_file.close();

system("PAUSE");
return 0;
}
dx30611 2006-04-12
  • 打赏
  • 举报
回复
在我的电脑上显示了10行没有错啊,LZ在看看
LZ忘了加#include <string>

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧