首先拿数据统计做例子:
统计一组数据的最大值,最小值,平均值。
如果不用文件操作,是这样:
#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; }