南昌大学|中正论坛

标题: C/C++文件操作的简单应用 [打印本页]

作者: lefttime    时间: 2007-8-25 09:26
标题: C/C++文件操作的简单应用
    在C/C++编写程序过程中,我们通常会遇到个问题, 就是输入测试数据多时,用手动输入效率不高,而且出错后又得重新来过:L 特别在ACM/ICPC这类比赛中,我们应尽量减少手动测试数据输入的时间,这时就会用到文件的输入输出流:
    来个简单的例子,从文件in.txt中输入两个整数,由小到大排序后输出到out.txt中,用空格分开。在这里假设输入文件和输出文件都存在:


[C源程序]
#include <stdio.h> /*要使用文件输入输出流必须的头文件*/

int main()
{
  FILE *in,*out;
  int a,b;
  in=fopen("in.txt","r");    /*以只读方式打开in.txt文件*/
  out=fopen("out.txt","w");  /*以只写方式打开out.txt文件*/
  while(fscanf(in,"%d%d",&a,&b)!=EOF) /*从in.txt文件中读取a,b的值,直到文件结束为止*/
    if(a<b)
      fprintf(out,"%d %d\n",a,b);  /*向out.txt文件输出结果*/
    else
      fprintf(out,"%d %d\n",b,a);
  fclose(in);    /*在C语言中必须加这一步,关闭文件防止文件被其它程序调用*/
  fclose(out);
  return 0;
}



[C++源程序]
#include <fstream> //要使用文件输入输出流必须的头文件
using namespace std;

ifstream inf("in.txt"); //定义文件输入流inf,并关联到in.txt
ofstream ouf("out.txt"); //定义文件输出流ouf,并关联到out.txt
int main()
{
  int a, b;
  inf>>a>>b; //inf中输入两个整数
  if(a<b)
    ouf<<a<<' '<<b<<endl; //ouf输出结果。
  else
    ouf<<b<<' '<<a<<endl;
  return 0;
}



上两程序会得到同一结果:

如果in.txt的内容为:
4 3

out.txt的内容为:
3 4

由此可以看出,对文本文件的输入输出与标准输入输出从格式上讲是一致的,只是需要定义一下文件输入输出流;C在定义时说明文件名后用户还需手动打开和关闭文件,而C++只需说明文件名即可,文件的打开与关闭动作是C++自动完成的,用户不必处理,这样就不会出现忘记关闭文件而丢失数据的情况了。
看得出C++在这方面处理得让程序员操作比较简单,但在使用过程中,如果是对大数进行处理的话个人觉得用C效率会比较高,小范围数据处理用C++比较方便:) 就看大家怎么用了:victory:

[ 本帖最后由 lefttime 于 2007-8-25 09:29 编辑 ]
作者: iwxiaot    时间: 2007-8-25 09:31
嗯,不错,不看的话,差不多忘了




欢迎光临 南昌大学|中正论坛 (http://ncu.myubbs.com/) Powered by Discuz! X3.3