为什么我在输入数据到txt后,会把前面的数据覆盖,只能保存最近输入的一组数据
这是代码intshuru(zhigongziz[]){ofstreamofile("D:\\Manage.txt");//打开一个文件,并且指定目录if(!ofile){...
这是代码
int shuru(zhigongzi z[])
{
ofstream ofile("D:\\Manage.txt");//打开一个文件,并且指定目录
if(!ofile)
{
cout<<"文件夹不能打开."<<endl;
return 0;
}
int p=1;
while(p==1)
{
i++;
z[i].setzhigongzi();
char tmp[512] = { '\0' };
sprintf(tmp, "%s %d %s %0.2f %0.2f %0.2f %0.2f %0.2f %0.2f %0.2f",
z[i].getbumen(), z[i].getnumber(), z[i].getname(), /*员工信息*/
z[i].getjbgz(), z[i].getjt(), z[i].getgwjt(), z[i].getyfs(), z[i].getgrsds(), z[i].getsks(), z[i].getsfs()); // 工资
ofile << tmp << endl;
cout<<"继续输入请按1,退出请按0:";
cin>>p;
}
return i+1;
ofile.close();
} 展开
int shuru(zhigongzi z[])
{
ofstream ofile("D:\\Manage.txt");//打开一个文件,并且指定目录
if(!ofile)
{
cout<<"文件夹不能打开."<<endl;
return 0;
}
int p=1;
while(p==1)
{
i++;
z[i].setzhigongzi();
char tmp[512] = { '\0' };
sprintf(tmp, "%s %d %s %0.2f %0.2f %0.2f %0.2f %0.2f %0.2f %0.2f",
z[i].getbumen(), z[i].getnumber(), z[i].getname(), /*员工信息*/
z[i].getjbgz(), z[i].getjt(), z[i].getgwjt(), z[i].getyfs(), z[i].getgrsds(), z[i].getsks(), z[i].getsfs()); // 工资
ofile << tmp << endl;
cout<<"继续输入请按1,退出请按0:";
cin>>p;
}
return i+1;
ofile.close();
} 展开
1个回答
展开全部
打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:
ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式
添加上:ios::app才会追加内容
因此:
ofstream ofile("D:\\Manage.txt", ios::out|ios::app);//打开一个文件,并且指定目录
这些方式是能够进行组合使用的,以“或”运算(“|”)的方式,例如:
ofstream out;
out.open("Hello.txt", ios::in|ios::out|ios::binary); //根据自己需要进行适当的选取
追问
嗯,我之前在别的论坛上也问过,都是这样的解答,我已经明白了,谢谢!不过可不可以用iOS::in来读取这个txt文件?感觉自己再次运行程序后,数据保存了,但如果再次查询数据的话,他无法显示,但txt当中还是存在的!
追答
把文件close了,重新再用ios::in打开就好了
我想你是要输入完马上再读取,
这样的话把读取指针移动一下才能读取,
参考fstream里面的seekg函数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询