期末考试考试成绩出来了,想写一个简单的程序来计算一下自己的加权平均,竟然忘记了文件的操作方法,写出来复习一下。
过程就是读取文件中的内容,然后计算加权平均:
成绩文件"1.txt"(第一列是成绩,第二列是学分):
75 1 75 3 87 3 83 2 81 3 88 3 75 3 71 3 85 1 84 3 83 3 88 1 91 2 85 1
·C++代码(ifstream/ofstream/fstream文件输入输出流):
#include<iostream> #include<stdio.h> #include<fstream> using namespace std; ifstream fin; //定义文件输入流 ofstream fout; //定义文件输出流 int main() { fin.open("1.txt") ; //打开输入文件,从1.txt中读取成绩数据 if(!fin) { cout<<"can not open the file"<<endl; return 0; } fout.open("2.txt"); //打开写入文件,将结果数据写入到2.txt中 int a[20][2]; int i=0; while(fin>>a[i][0]>>a[i][1]) //依次从1.txt中读入数据到内存 i++; int x=0,y=0; for(int j=0;j<i;j++) { x+=a[j][0]*a[j][1]; y+=a[j][1]; } fout<<(double)x/y<<endl; //得到加权平均分 fin.close(); //关闭输入文件1.txt fout.close(); //关闭写入文件2.txt system("pause"); return 0; }
2.txt内容:81.6563
#include<stdio.h> int main() { FILE *fp,*fp1; int a[20][2]; fp=fopen("1.txt","r+"); //以可读的方式打开1.txt文件 fp1=fopen("2.txt","w"); //以可写的方式打开2.txt文件 int i=0; while( !feof(fp) ) //读至文件末尾 { fscanf(fp,"%d%d",&a[i][0],&a[i][1]); //从文件1.txt中读取数据 i++; } int x=0,y=0; for(int j=0;j<i;j++) { x+=a[j][0]*a[j][1]; y+=a[j][1]; } fprintf(fp1,"%f",(double)x/y); //将结果数据写入2.txt文件 return 0; }
2.txt内容:81.656250
在linux下用"<"符号从文件中读取数据,举个很简单的例子:
input.cc:
#include<iostream> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a<<" "<<b<<endl; return 0; }input.txt:
3 1运行方法:
这么做的缺点就是程序无法判断文件读取结束,如果遇到循环while的情况,有可能重复读取最后一行的数据不结束。
还可以用shell脚本写,抽空可以学习补充。
文章链接:http://blog.csdn.net/lavorange/article/details/9990103