我想是的先把数据读进文件中,然后再打开,用原来的部分数据覆盖文件中的数据,可是下面这段代码的“修改”之后的部分运行出来的结果是错的,请问是怎么回事呢?
或者有没有更好的删除数据的办法?
#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;
int main()
{
int i=0;
char a[100],b[100],c[100];
cout<<"请输入三条记录(每条记录以#结束):\n"
<<"第一条:\n";
cin.getline(a,100,'#');
cout<<"第二条:\n";
cin.getline(b,100,'#');
cout<<"第三条:\n";
cin.getline(c,100,'#');
//导入数据
ofstream outfile("student.dat");
ofstream fcout("d:\\student.dat");
if(fcout.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcout<<a<<endl<<b<<endl<<c<<endl;
fcout.close();
fcout.clear();
//读取输出
ifstream fcin("d:\\student.dat");
if(fcin.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcin.getline(a,100,'#');
cout<<"删除前为:\n";
cout<<a<<endl;
fcin.close();
fcin.clear();
system("pause");
//用 a和c这两个字符串 覆盖文件中的原来的数据,目的为了删除b这个字符串
//删除--打开文件
if(fcout.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcout<<a<<endl<<c<<endl;
fcout.close();
//提取数据输出
if(fcin.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcin.getline(a,100,'#');
cout<<"删除后为:\n"<<a<<endl<<c<<endl;
fcin.close();
return 0;
}
c++文件流操作中,从文件中提取数据时,是现将数据存入一个变量中,然后再将这个变量输出。问题中这段代码犯了一个错误,就是忽略了在文件流中提取数据时“fcin>>a”就是将文件流中的数据提取到'“a”中,然后“a”原来的数据就被覆盖了,所以程序的运行结果是错误的。以下代码能够运行出来:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int i=0,j=0;
char a[100],b[100],c[100],d[100];
cout<<"请输入三条记录(每条记录以#结束):\n"
<<"第一条:\n";
cin.getline(a,100,'#');
cout<<"第二条:\n";
cin.getline(b,100,'#');
cout<<"第三条:\n";
cin.getline(c,100,'#');
//导入数据
ofstream outfile("student.dat");
ofstream fcout("d:\\student.dat");
if(fcout.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcout<<a<<endl<<b<<endl<<c<<endl;
fcout.close();
//读取输出
ifstream fcin("d:\\student.dat");
if(fcin.fail())
{
cerr<<"error opening file\n";
return 0;
}
fcin.getline(d,100,'#');
cout<<"删除前为:\n";
cout<<d<<endl;
//删除
while(a[i]!='\0')
{
d[i]=a[i];
i++;
}
while(c[j]!='\0')
{
d[i]=c[j];
i++,j++;
}
d[i]='\0';
cout<<"删除后为:\n"
<<d<<endl;
fcin.close();
return 0;
}