文件的输入输出 望指点
#include<iostream>
#include<fstream>
using namespace std;
void fun1()
{
int a[10];
ofstream outfile1("f1.dat"),outfile2("f2.dat");
if(!outfile1)
{
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
if(!outfile2)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"enter 10 numbers:"<<endl;
for(int i=0;i<10;i++)
{
cin>>a[i];
outfile1<<a[i]<<' ';
}
cout<<"enter 10 numbers:"<<endl;
for(i=0;i<10;i++)
{
cin>>a[i];
outfile2<<a[i]<<' ';
}
outfile1.close();
outfile1.close();
}
void fun2()
{
ifstream infile("f1.dat");
if(!infile)
{
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
ofstream outfile("f2.dat",ios::app);
if(!outfile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a;
for(int i=0;i<10;i++)
{
infile>>a;
outfile<<a<<' ';
}
infile.close();
outfile.close();
}
void fun3()
{
ifstream infile("f2.dat");
if(!infile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a[20];
int i,j,t;
for(i=0;i<20;i++)
infile>>a[i];
for(i=0;i<19;i++)
{
for(j=0;j<19-j;j++)
{
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}
infile.close();
ofstream outfile("f2.dat",ios::out);
if(!outfile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"data in f2.dat:"<<endl;
for(i=0;i<20;i++)
{
outfile<<a[i]<<' ';
cout<<a[i]<<' ';
}
cout<<endl;
outfile.close();
}
int main()
{
fun1();
fun2();
fun3();
return 0;
}
希望建立两个磁盘文件f1.dat和f2.dat,实现以下功能:
1.从键盘输入二十个数,分别存放在两个磁盘文件中
2.从f1.dat读入10个数,然后放到f2.dat文件所有原有数据后面
3.从f2.dat中读入20个整数,对他们按从大到小的顺序存放到f2.dat(不保留原有数据)
出现的问题是:可以正常输入,但是输出的时候不能达到预期的目标
c++? 磁盘 输入输出
[解决办法]
#include<iostream>
#include<fstream>
using namespace std;
void fun1()
{
int a[10];
ofstream outfile1("f1.dat"),outfile2("f2.dat");
if(!outfile1)
{
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
if(!outfile2)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"enter 10 numbers:"<<endl;
for(int i=0;i<10;i++)
{
cin>>a[i];
outfile1<<a[i]<<' ';
}
cout<<"enter 10 numbers:"<<endl;
for(int i=0;i<10;i++)
{
cin>>a[i];
outfile2<<a[i]<<' ';
}
//你这里手误了,文件操作完不保存结果,下一次的打开是不确定的
outfile1.close();
outfile2.close();
}
void fun2()
{
ifstream infile("f1.dat");
if(!infile)
{
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
ofstream outfile("f2.dat",ios::app);
if(!outfile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a;
for(int i=0;i<10;i++)
{
infile>>a;
outfile<<a<<' ';
}
infile.close();
outfile.close();
}
void fun3()
{
ifstream infile("f2.dat");
if(!infile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a[20];
int i,j,t;
for(i=0;i<20;i++)
infile>>a[i];
for(i=0;i<19;i++)
{
//看你自己的循环条件控制,手误!!写代码要多加小心!,程序写的还是不错的
for(j=0;j<19-i;j++)
{
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}
infile.close();
ofstream outfile("f2.dat",ios::out);
if(!outfile)
{
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"data in f2.dat:"<<endl;
for(i=0;i<20;i++)
{
outfile<<a[i]<<' ';
cout<<a[i]<<' ';
}
cout<<endl;
outfile.close();
}
int main()
{
fun1();
fun2();
fun3();
return 0;
}
因为第三次的操作会把第二次的结果给覆盖掉,所以最后文件f2.txt的内容就是排好序的20个整数了,只是改了两处手误代码,其余的没动