C语言简单的文件打开/读取数据/写回文件操作

期末考试考试成绩出来了,想写一个简单的程序来计算一下自己的加权平均,竟然忘记了文件的操作方法,写出来复习一下。

过程就是读取文件中的内容,然后计算加权平均:

成绩文件"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









你可能感兴趣的:(文件操作)