C++文件I/O的问题....

hurryboylqs 2006-08-09 11:53:24
#include <iostream>
#include <string>
#include<fstream>
using namespace std;

int main()
{
string bookName;//书名
long bookid; //书的ID号
ofstream fout;
ifstream fin;
fout.open("text1.txt",ios::binary);
if(fout.fail())
{
cout<<"opening file fail!"<<endl;
return 0;
}
for(int i=0;i<4;i++)
{
cout<<"input data:";
cin>>bookName>>bookid;
fout<<bookName<<bookid;
}

fout.close();//文件写入结束,关闭

fin.open("text1.txt",ios::binary);/打开文件,读取
if(fin.fail())
{
cout<<"opening file fail!"<<endl;
return 0;
}

while(!fin.eof())
{

fin>>bookName>>bookid;
cout<<bookName<<bookid<<endl;//输出到屏幕

}

fin.close();//读取文件结束,关闭

return 0;
}



输入:
input data:c++ 0001
input data:java 0002
input data:c# 0003
input data:jsp 0004

当读取文件并输出到屏幕时为什么与输入有差别呢?while(!fin.eof()) 这句判断文件结束不对?还有执行cout<<bookName<<bookid<<endl输出到屏幕时,也没有换行显示数据!!请大虾指点指点,捆扰好久了。
...全文
221 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianshanfe 2006-08-10
  • 打赏
  • 举报
回复
输出是什么啊,写出来看看啊
hurryboylqs 2006-08-10
  • 打赏
  • 举报
回复
试了楼上的方法可以,中间没有空格的话读的时候可能出错了
------------------------------------------------------
是的,原因是什么呢?
believefym 2006-08-10
  • 打赏
  • 举报
回复
试了楼上的方法可以,中间没有空格的话读的时候可能出错了
hurryboylqs 2006-08-10
  • 打赏
  • 举报
回复
谢谢各位
ectt0923 2006-08-10
  • 打赏
  • 举报
回复
学习中!
dx30611 2006-08-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;

int main()
{
string bookName;//书名
long bookid; //书的ID号
ofstream fout;
ifstream fin;
fout.open("text1.txt",ios::binary);
if(fout.fail())
{
cout<<"opening file fail!"<<endl;
return 0;
}
for(int i=0;i<4;i++)
{
cout<<"input data:";
cin>>bookName>>bookid;
fout<<bookName<<setw(5)<<bookid;
if(i!=3)
fout<<"\r\n";
}

fout.close();//文件写入结束,关闭

fin.open("text1.txt",ios::binary);//打开文件,读取
if(fin.fail())
{
cout<<"opening file fail!"<<endl;
return 0;
}

while(!fin.eof())
{

fin>>bookName>>bookid;
cout<<bookName<<setw(5)<<bookid<<endl;//输出到屏幕
}

fin.close();//读取文件结束,关闭

return 0;
}
我稍微改了一下,运行的很好
如果文件中间没有空格的话,程序就不知道向前读取多少个字符,程序在用>>符号读取文件时以空格,换行,制表符为分界点,并且忽略掉这三个字符
du51 2006-08-10
  • 打赏
  • 举报
回复
fout<<bookName<<" "<<bookid;//试试
hurryboylqs 2006-08-10
  • 打赏
  • 举报
回复
你可以帖上去运行一下,就是跟输入的结果不一样
照例应该是这样吧:
c++0001
java0002
c#0003
jsp0004
结果却是:c++0001java0002c#0003jsp0004-8523215 后面哪个数总之是很大的负数,输出格式不对而且结果也不对(多了个负数!)

65,186

社区成员

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

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