文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言-I/O流设计实验

2024-04-02 19:55

关注

前言

文件的读取和写入是使用的是fscanffprintf两个函数,C语言中文件读取的函数不止这两个。文章中采用读取文件的方式有两个,输入行数和使用EOF判断文件末尾。 %s进行读取时不需要使用取址符&,主要是用于输入字符数组。

环境CodeBlocks 文本阅读软件NotePadd++

一、题目

实验 I/O流设计

一、 实验目的:

熟悉文件流类的使用,掌握文件的打开、读写、关闭操作。

二、 实验时间:

三、 实验地点:

四、 实验内容:

1.输入任意多个学生的数据(学号,姓名,成绩),将数据存放在student.dat文件中,然后从该文件中读出所有数据并显示。

2.编程将2个文件的内容连成一个文件。

3.编写程序,给一个文本文件加上行号后存到另外一个文件中。

五、实验要求:在上机前写出全部源程序;

六、实验结果分析:

二、代码及效果

[1]. 第一问

在这里插入图片描述

在这里插入图片描述


#include<stdio.h>
struct student{
    char number[20];//学号
    char name[20];//姓名
    int score;//成绩
}stu[100];//学生结构体数组
int main()
{
    FILE *file1 = fopen("student.dat","w");//文件指针,写
    FILE *file2;//文件指针,读
    int i;
    int num = 0;//学生个数
    printf("学生个数:");
    scanf("%d",&num);
    fprintf(file1,"%d\n",num);//将学生个数放在文件首行
    for(int i = 0;i < num;i++){//输入学生信息
        printf("第%d位学生\n",i+1);
        printf("学号: ");
        scanf("%s", stu[i].number);//学号
        printf("姓名: ");
        scanf("%s", stu[i].name);//姓名
        printf("成绩: ");
        scanf("%d", &stu[i].score);//成绩
        //存入文件
        fprintf(file1,"%s %s %d\n",stu[i].number,stu[i].name,stu[i].score);
    }
    fclose(file1);//关闭文件指针
    file2 = fopen("student.dat","r");//读取文件
    fscanf(file2,"%d",&num);//读取第一行的学生个数
    //printf("%d\n",num);
    for(int i = 0;i < num;i++){//显示文件的数据
        //局部变量
        char number[20];
        char name[20];
        int score;
        //获取当前行的数据
        fscanf(file2,"%s",number);
        fscanf(file2,"%s",name);
        fscanf(file2,"%d",&score);
        //打印
        printf("第%d位学生: %s %s %d\n",i+1,number,name,score);
    }
    fclose(file2);
    return 0;
}

[2]. 第二问

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


#include<stdio.h>
struct student{
    char number[20];//学号
    char name[20];//姓名
    int score;//成绩
}stu1[100],stu2[100];//学生结构体数组
int main()
{
    int i,num1,num2;
    char file_name1[20];
    char file_name2[20];
    char file_name3[20];
    FILE *file1,*file2,*file3;//文件指针
    file1 = fopen("student1.dat","r");//读取文件1
    file2 = fopen("student2.dat","r");//读取文件2
    file3 = fopen("student3.dat","w");//写入文件3
    //获取文件1内容
    fscanf(file1,"%d",&num1);//读取第一行的学生个数
    for(int i = 0;i < num1;i++){
        fscanf(file1,"%s",stu1[i].number);
        fscanf(file1,"%s",stu1[i].name);
        fscanf(file1,"%d",&stu1[i].score);
        //printf("第%d位学生: %s %s %d\n",i+1,stu1[i].number,stu1[i].name,stu1[i].score);
    }
    //获取文件2内容
    fscanf(file2,"%d",&num2);//读取第一行的学生个数
    for(int i = 0;i < num2;i++){
        fscanf(file2,"%s",stu2[i].number);
        fscanf(file2,"%s",stu2[i].name);
        fscanf(file2,"%d",&stu2[i].score);
        //printf("第%d位学生: %s %s %d\n",i+1,stu2[i].number,stu2[i].name,stu2[i].score);
    }
    //写入文件3
    fprintf(file3,"%d\n",num1+num2);
    for(int i = 0;i < num1;i++){//遍历stu1数组
        fprintf(file3,"%s %s %d\n",stu1[i].number,stu1[i].name,stu1[i].score);
    }
    for(int i = 0;i < num1;i++){//遍历stu2数组
        fprintf(file3,"%s %s %d\n",stu2[i].number,stu2[i].name,stu2[i].score);
    }
    //printf("已将student1.dat和student2.dat内容存入student3.dat");
    printf("复制成功!");
    fclose(file1);
    fclose(file2);
    fclose(file3);
    return ;
}

[3]. 第三问

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


#include<stdio.h>
#include<string.h>
struct text
{
    char str[100];//字符数组,存储每行的数据
}t[100];//结构体数组
int main(){
    FILE *file1 = fopen("stu1.dat","r");//文件指针,读
    FILE *file2 = fopen("stu2.dat","w");//文件指针,写
    int i,num = 0;
    //读
    while(1){//遍历文件stu1.dat
        char str[100];
        if(fscanf(file1,"%s",str)==EOF){//若读取到最后一行时
            printf("文件读取结束!\n");
            break;
        }else{
            strcpy(t[num].str,str);//将字符数组复制到结构体数组
            num++;//定位到下一个结构体
        }
    }
    //写入文件
    for(int i = 0;i < num;i++){//遍历结构数组t
        //printf("%s\n",t[i].str);
        fprintf(file2,"%d%s\n",i+1,t[i].str);
    }
    fclose(file1);
    fclose(file2);
    return 0;
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯