您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言从文件中读取并写入结构体数组

时间:01-03来源:作者:点击数:

新建一个文件,包含若干条学生信息,将它们读入到一个数组,然后再把数组输出到另一个文件。文件名是通过命令行参数传递的。

该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解

#include <stdio.h>
#define SIZE 10
#define NAMESIZE 25
typedef struct {
    char name[NAMESIZE];
    int  midterm;
    int final;
    int homeworks;
} student;
// n 为数组 a 的元素个数,filename 为写入的文件名
void writeStudentArray(char filename[], student a[], int n)
{
    FILE *fd;  // filename 的文件描述符
    int i;
   
    if(n<=0)
        return;
    if((fd=fopen(filename,"w"))==NULL){
        perror("fopen");
        exit(1);
    }
    for (i=0;i<n;i++){
        fprintf(fd,"%s %d %d %d\n", a->name, a->midterm, a->final, a->homeworks);
        a++;
    }
    fclose(fd);
}
// 最多从 filename 文件中读取 nmax 条学生信息,并保存到数组 a。该函数返回实际读取的记录的条数。
int readStudentArray(char filename[], student a[], int nmax)
{
    FILE *fd;  // filename 的文件描述符
    int i=0;
   
    if((fd=fopen(filename,"r"))==NULL){
        perror("fopen");
        exit(1);
    }
    while(fscanf(fd,"%s %d %d %d", a->name, &a->midterm, &a->final, &a->homeworks)!=EOF){
        if(++i==nmax) break;  // 已经将表格填满
        a++;
    }
    fclose(fd);
    return i;
}
int main(int argc, char *argv[]){
    int n;
    student table[SIZE];
    if(argc!=3){
        printf("Usage: %s infile outfile\n", argv[0]);
        exit(0);
    }
    n = readStudentArray(argv[1],table,SIZE);
    writeStudentArray(argv[2],table,n);
}

该程序构建后,需要通过命令行工具(cmd.exe)运行。

例如,我编译后的程序在 E:\cDemo\Debug\ 文件,需要操作的两个文件位于 D 盘根目录,分别为 input.txt 和 output.txt,output.txt 为空,input.txt 的内容为:
         cdsy  45  20  30
         www.cdsy.xyz   35  90  100
         aom  89  99  88

需要在命令行进行如下操作:

打开 output.txt,发现与 input.txt 的内容一样。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门