现在的位置: 首页 > 综合 > 正文

c/c++ 文件操作小练

2013年10月09日 ⁄ 综合 ⁄ 共 1286字 ⁄ 字号 评论关闭

首先拿数据统计做例子:

统计一组数据的最大值,最小值,平均值。

如果不用文件操作,是这样:

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(){
	int x,n=0,min=99999,max=-99999,s=0;
	while(scanf("%d",&x)==1){
		s+=x;
		if(x<min) min=x;
		if(x>max) max=x;
		n++;
	}
	printf("%d %d %.3lf\n",min,max,double(s/n));
	return 0;
}

由于每次都要输入新数据,比较麻烦,可以用文件的方式,之间统计一个文件里面的数据。

使用文件最简单的方式是使用输入输出重定向,直接在main函数入口写上以下两条语句即可:

freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);  

它将使scanf从文件input.txt读取,写入到output.txt文件。

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main(){
	int x,n=0,min=99999,max=-99999,s=0;
	while(scanf("%d",&x)==1){
		s+=x;
		if(x<min) min=x;
		if(x>max) max=x;
		n++;
	}
	printf("%d %d %.3lf\n",min,max,double(s/n));
	return 0;
}

不使用重定向,也可以使用fopen:

#include<stdio.h>
#define INF 1000000
int main(){
	FILE*fin,*fout;
	fin=fopen("data.in.txt","rb");
	fout=fopen("data.out.txt","wb");
	int x,n=0,min=INF,max=-INF,s=0;
	while(fscanf(fin,"%d",&x)==1)
	{
		s+=x;
		if(x<min) min=x;
		if(x>max) max=x;
		n++;
	}
	fprintf(fout,"%d %d %.3lf",min,max,(double)s/n);
	fclose(fin);
	fclose(fout);
	return 0;
}

c++中的文件读取写入:

#include <iostream>
#include <fstream>
#define INF 1000000
using namespace std;
ifstream fin("input.txt");
ofstream fout("output.txt");
int main()
{
	int x,n=0,max=-INF,min=INF;
	double s=0.0;
	while(fin>>x) {
		s+=x;
		if(x<min) min=x;
		if(x>max) max=x;
		n++;
	}	
	fout<<min<<" "<<max<<" "<<s/n<<endl;
	return 0;
}

抱歉!评论已关闭.