作业13: 文件的输入与输出

作业13: 文件的输入与输出

/*************************** 第13章  14题  P458   ******************************

4.建立两个磁盘文件 f1.dat 和 f2.dat,编程序实现以下工作:
1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);
2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;
3)从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)

******************************************************************************/


// T4_RWFile.cpp 
/*************************** 第13章  14题  P458   ******************************
4.建立两个磁盘文件 f1.dat 和 f2.dat,编程序实现以下工作:
1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);
2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;
3)从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)
******************************************************************************/

#include 
#include 
using namespace std;

int main()
{
 	int onceagain = 0;
 	do
 	{
// statement
   char* stat =
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
"   该程序实现的功能:建立两个磁盘文件 f1.dat 和 f2.dat,\n"
"1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);\n"
"2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;\n"
"3)从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据) \n"
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
"     要开始咯    GO... GO... GO... \n\n";
   cerr << stat;

 	
// 从键盘输入20个整数

	int a[20];								// 用作储存数字
	int i;					  				// 用作循环条件
	cerr << "输入20个整数:(每输入一个按一下回车):" << endl;
	for(i = 1; i <= 20; ++i)
	{
		cout << "第 " << i << " 个:  ";
		cin >> a[i-1];
	}
  cout << endl << "输入完毕!" << endl << endl;
  
// 分别存放在两个磁盘文件中(每个文件中放10个整数)

  ofstream outfile;		    	// 定义 ofstream 类(输出文件流类)对象 outfile
  ifstream infile;				// 定义 ifstream 类(输入文件流类)对象 infile
  const char * f1 = "f1.dat";
  const char * f2 = "f2.dat";

	
	
	cerr << "开始写入数据到 " << f1 << " 文件..." << endl;
	outfile.open(f1, ios::out);         	//.open()  f1.dat
	for(i = 0; i < 10; ++i)
	{
		outfile << a[i] << endl;
		cerr << a[i] << endl;
	}
	outfile.close();						// .close()  f1.dat
	cerr << "写入成功!" << endl << endl;


	cerr << "开始写入数据到 " << f2 << " 文件..." << endl;
	outfile.open(f2, ios::out);          	//.open()    f2.dat
	for(i = 10; i < 20; ++i)
	{
		outfile << a[i] << endl;
		cerr << a[i] << endl;
	}
	outfile.close();					   // .close()  f2.dat
	cerr << "写入成功!" << endl << endl;	
	cerr << endl << "Yeah! 第一任务执行成功。" << endl << endl; 
	
	cerr << "请按回车键继续..." << endl; 
	cin.get();
	cin.get();
	
// 从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;
// 读取  // 写入 ios::app 可加到末尾 ios::ate 文件指针指向末尾
    int t[20];
	infile.open(f1, ios::in);				//.open() f1.dat
	outfile.open(f2, ios::out | ios::app);	//.open() f2.dat
	cerr << "正在从 " << f1 
		 << " 读入10个数,然后存放到 " << f2 << " 文件原有数据的后面..." 
		 << endl;
	for(i = 0; i < 10; ++i)
	{
        cerr << "- -正在读取第 " << i+1 << " 个数: "; 
		infile >> t[i];
		cerr << t[i] << endl;
		cerr << " + 正在写入第 " << i+1 << " 个数: ";
		outfile << t[i] << endl;
		cerr << t[i] << endl;
	}
	infile.close();							//.close() f1.dat
	outfile.close();						//.close() f2.dat
	cerr << "Yeah! 第二任务执行成功。" << endl << endl; 
	
	cerr << "请按回车键继续..." << endl; 
	cin.get();
	

// 从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)

// 读取 
    infile.open(f2, ios::in);
    for(i = 0; i < 20; ++i)
	{
	infile >> t[i];
	cerr << "成功读取第 " << i+1 << " 个数: " << t[i] << endl; 
	}
    infile.close();

// 排序 -- 选择法 
   int k;
   int j; 
   int min;
   for (i = 0; i < 20; ++i)
   {
   	   k = i;
   	   min = t[i];
   	 // 找出最小值 
   	   for (j = i; j < 20; ++j)
   	   	  if (t[j] < min)
   	   	   {
   	   	   	  min = t[j];
   	   	   	  k = j;
	  	  }
    // 换位 
 		 min = t[k];		// min此时只作temp临时比较作用 
 		 t[k] = t[i];
 		 t[i] = min;
    }


	cerr << endl;
// 输出 
    outfile.open(f2, ios::out);
    for(i = 0; i < 20; ++i)
	{
	outfile << t[i] << endl;
	cerr << "成功输出第 " << i+1 << " 个数: " << t[i] << endl; 
	}
	outfile.close();
	cerr << endl << "Yeah! 成功排序输出!第三任务执行成功!" << endl; 
	
	
	cerr << endl << "若想退出,请输入0,否则请输入其它数字:"; 
	cin >> onceagain;
	cout << endl << endl;
	}while(onceagain);
	
	return 0;
	
}


你可能感兴趣的:(〖10级大一课堂习题〗C++)