期末考试考试成绩出来了,想写一个简单的程序来计算一下自己的加权平均,竟然忘记了文件的操作方法,写出来复习一下。
过程就是读取文件中的内容,然后计算加权平均:
成绩文件"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
C代码(fopen/fscanf/fprintf,打开文件/读取数据/写入数据):
#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