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

 

 

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值