C语言文件操作系统实验

⭐一个很基础的文件实验,让我们初步接触文件操作
⭐C语言文件操作实验:用C语言实现把n个学生的姓名,学号,英语成绩,数学成绩存到文件中计算总分并且在屏幕上显示学生信息
划重点(小细节来了)
对于文件操作实现有两种方法,一种是用fscanf/fprintf函数实现,另外一种是用fwrite/fread函数实现,我的建议是用前者编写代码。具体的原因是因为fscanf/fprintf函数创建的是文本文件,可以用编译器直接打开,而后者创建的是二进制文件,打开后会出现乱码的情况。
两种函数的具体实现方式我都会给大家介绍

⭐函数中涉及到的文件地址就是我们所要进行操作的文件,复制文件地址时会有‘‘转义符号编译器会报错,我们可以用两个’'或者用’/'符号代替就可以了。
用我自己的文件举个栗子:
“D:\Stephen_Curry__.txt”
这个文件地址我们只需要修改成
"D:\\Stephen_Curry__.txt"或者"D:/Stephen_Curry__.txt"就可以正常运行了。⭐

代码如下:

第一种用fscanf/fprintf函数实现

//创建的是文本文件
#include<stdio.h>
#include<stdlib.h>
int n;
struct student
{
    
    
    char name[100];
    char eng[20];
    int english;
    int math;
    int sum;
}stu[100],*qq,*pp;
int main()
{
    
    
    FILE *fp;
    qq=stu;
    if((fp=fopen("文件地址","wb+"))==NULL)
    {
    
    
        printf("Cannot open file,strike any key exit!");
        exit(1);
    }
    printf("intput student number:\n");
    scanf("%d",&n);
    printf("input data\n");
    //从键盘输入学生数据存入数组
    for(int i=0;i<n;i++,qq++)
    {
    
    
        scanf("%s%s%d%d",qq->name,qq->eng,&qq->english,&qq->math);
        qq->sum=qq->english+qq->math;
    }

    qq=stu;
    pp=stu;
    //把数组中学生数据粗存入文件
    for(int i=0;i<n;i++,qq++)
        fprintf(fp,"%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
    //把文件指针重新定位到文件头
    rewind(fp);
    //从文件中读取学生数据到数组
    for(int i=0;i<n;i++,pp++)
        fscanf(fp,"%s%s%d%d%d",pp->name,pp->eng,&pp->english,&pp->math,&pp->sum);

    printf("\n\nname\tnumber     english     math     sum\n");
    qq=stu;
    for(int i=0;i<n;i++,qq++)
        printf("%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
    fclose(fp);
    return 0;
}

第二种用fwrite/fread函数实现

//创建的是二进制文件
#include<stdio.h>
#include<stdlib.h>
int n;
struct student
{
    
    
    char name[100];
    char eng[20];
    int english;
    int math;
    int sum;
}stu[10],*qq,*pp;
int main()
{
    
    
    FILE *fp;
    qq=stu;
    if((fp=fopen("文件地址","wb+"))==NULL)
    {
    
    
        printf("Cannot open file,strike any key exit!");
        exit(1);
    }

    printf("intput studen number:\n");
    scanf("%d",&n);
    printf("input data\n");

    //从键盘输入两个学生数据存入数组
    for(int i=0;i<n;i++,qq++)
    {
    
    
        scanf("%s%s%d%d",qq->name,qq->eng,&qq->english,&qq->math);
        qq->sum=qq->english+qq->math;
    }
    qq=stu;
    pp=stu;

    //把数组中学生数据写入文件
    fwrite(pp,sizeof(struct student),n,fp);

    //把文件指针重新定位到文件头
    rewind(fp);

    //从文件中读取学生数据到数组
    fread(qq,sizeof(struct student),n,fp);

    printf("\n\nname\tnumber     english     math     sum\n");

    for(int i=0;i<n;i++,qq++)
        printf("%s\t%s\t%5d%5d%5d\n",qq->name,qq->eng,qq->english,qq->math,qq->sum);
    fclose;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Stephen_Curry___/article/details/124177955