为什么这个程序不能保存数据到文件中?

九度空间 2010-12-04 10:17:17
可以创建文件 却不能保存输入的数据 很令人费解

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,char **argv)
{
char create;
ofstream os;
string id,name;
os.open("xx.dat",ios::in);
if(!os)
{
cout<<"你想创建新帐户吗?\n";
cin>>create;
if(create == 'y')
{
os.open("xx.dat",ios::app);
cout<<"请输入你的ID及名字:\n";
cin>>id>>name;
os<<id<<"|"<<name;
}
else
{
exit(0);
}
}
os.close();

...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangzhe10 2010-12-04
  • 打赏
  • 举报
回复
exit(0);直接关闭程序了,并没有执行os.close();
蜥蜴枪王 2010-12-04
  • 打赏
  • 举报
回复
ios::app: 以追加的方式打开文件   
ios::ate: 文件打开后定位到文件尾,
ios:app就包含有此属性   
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文   
ios::in: 文件以输入方式打开 (也就是读方式)  
ios::out: 文件以输出方式打开 (这个才是写)  
ios::nocreate: 不建立文件,所以文件不存在时打开失败   
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败   
ios::trunc: 如果文件存在,把文件长度设为0


dingshaofengbinbin 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hnuqinhuan 的回复:]
C/C++ code

ios::app: 以追加的方式打开文件   
ios::ate: 文件打开后定位到文件尾,
ios:app就包含有此属性   
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文   
ios::in: 文件以输入方式打开 (也就是读方式)  
ios::out: 文件以输出方式打开 (这个才是写)  
ios::n……
[/Quote]
正解,至少要加个out吧
無_1024 2010-12-04
  • 打赏
  • 举报
回复

ios::app: 以追加的方式打开文件   
ios::ate: 文件打开后定位到文件尾,
ios:app就包含有此属性   
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文   
ios::in: 文件以输入方式打开 (也就是读方式)  
ios::out: 文件以输出方式打开 (这个才是写)  
ios::nocreate: 不建立文件,所以文件不存在时打开失败   
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败   
ios::trunc: 如果文件存在,把文件长度设为0

你弄反了
無_1024 2010-12-04
  • 打赏
  • 举报
回复
ofstream os;
os.open("xx.dat",ios::ate | ios::app);
换成这个试一试吧
無_1024 2010-12-04
  • 打赏
  • 举报
回复
ofstream os;
os.open("xx.dat",ios::in);
os.open("xx.dat",ios::app);
你确定怎样用没错啊
luciferisnotsatan 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hnuqinhuan 的回复:]

C/C++ code

ios::app: 以追加的方式打开文件   
ios::ate: 文件打开后定位到文件尾,
ios:app就包含有此属性   
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文   
ios::in: 文件以输入方式打开 (也就是读方式)  
ios::out: 文件以输出方式打开 (这个才是写)  
ios::nocreat……
[/Quote]
正解

ofstream是输出流,lz设in,没报错?
另外
os.open("xx.dat",ios::in);打开了次文件
os.open("xx.dat",ios::app);又打开了次
gules 2010-12-04
  • 打赏
  • 举报
回复
因为ofstream是输出文件流,而LZ代码中打开文件标志设置错误。

64,683

社区成员

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

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