【C语言】文件操作习题-瑞格(5864-5867)

一、瑞格5864-读取文件修改后输出

1.题目说明
在这里插入图片描述
2.思路
step1:打开文件,因为只需要可读,所以用r模式

step2:读取文件每行用fgets(a,50,fp)获取,进行大小写处理后存入数组a,并直接将数组a输出

step3:处理完每行将i变为0,根据文件下一行的读取数据更新数组a
3、代码实现

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[50];
    int i=0;
    FILE *fp=fopen("测试数据.txt","r");//打开文件
    if(fp==NULL)
    {
        printf("文件打开失败!\n");
        exit(1);
    }
    else
    {
        while(fgets(a,50,fp)!=NULL)//一行一行获取
        {
            while(a[i]!='\0')//处理每行,每行的结尾是'\0'
            {
                if(a[i]>='A'&&a[i]<='Z')
                a[i]=a[i]-'A'+'a';
                i++;
            }
            printf("%s",a);
            i=0;//一定要把每次的i归零才能更新数组a
        }
    }
    fclose(fp);
    return 0;
}

4.文件存储位置+文件内容+运行结果
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

二、瑞格5865-从键盘输入存入文件

1.题目说明
在这里插入图片描述
在这里插入图片描述
2.思路
step1:要求可写,所以以w模式打开文件
step2:根据行数t,将每一行写到文件中,记得每行的结尾要加换行符
3、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int t,n,num;
    char a[100];
    FILE *fp=NULL;
    if((fp=fopen("test01.txt","w"))==NULL)//打开文件
    {
         printf("文件打开失败!\n");
                exit(1);
    }
    while(scanf("%d ",&t)!=EOF)
    {
        if(t==0) break;
        while(t--)
        {
            gets(a);
            fputs(a,fp);//把每行写入文件
            fputc('\n',fp);
          //  memset(a,0,sizeof(a));
        }
    }
    return 0;
}
/*
3
I love China!
This is a book!
How are you?
2
This is a dog.
I love dogs.
0
I love China!

*/

4.运行结果+文件内容
在这里插入图片描述

三、瑞格5866-结构体+存入文件

1.题目说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.思路
step1:定义结构体,将所有的的数据存入
step2:将所有的数据按照该有的格式写入文件
3、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student
{
    int num;
    char name[20];
    char sex;
    double scores[3];
    double avg;
    double sum;
}stu;
int main()
{
    int n,i,j,l;
    stu *s;
    FILE *fp=fopen("student.txt","w");
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        exit(1);
    }
    while(scanf("%d",&n)!=EOF)
    {
        s=(stu *)malloc(n*sizeof(stu));
        //千万记得分配内存,否则数据存不上
        for(i=0; i<n; i++)
        {
            s[i].sum=0;
            printf("请输入学生学号:\n");
            scanf("%d",&s[i].num);
            printf("请输入学生姓名:\n");
            getchar();
            gets(s[i].name);//名字中有空格
            printf("请输入学生性别:\n");
            scanf("%c",&s[i].sex);
            for(j=0; j<3; j++)
            {
                scanf("%lf",&s[i].scores[j]);
                s[i].sum+=s[i].scores[j];
            }
            s[i].avg=s[i].sum/3.0;
            fprintf(fp,"%d ",s[i].num);
            l=strlen(s[i].name);
            fprintf(fp,"%d ",l);
            fputs(s[i].name,fp);//有空格的名字用puts
            fprintf(fp," %c ",s[i].sex);//前后都要加空格
            for(j=0; j<3; j++)
            {
               fprintf(fp,"%.2lf ",s[i].scores[j]);
            }
            fprintf(fp,"%.2lf %.2lf\n",s[i].avg,s[i].sum);
        }
    }
    fclose(fp);
    //运行结束后 先回车再ctrl+z,结束程序
    return 0;
}
/*
4
20140101
li ming
m
85 90 92
20140202
zhao li
f
98 78 88
20140013
qiao en
m
92.5 85.6 78.5
20140015
lu yao
m
89.4 86.5 88
*/

4.运行结果+文件内容
在这里插入图片描述

三、瑞格5867-结构体+读取文件

1.题目说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.思路
step1:定义结构体,按照该有的格式从文件中一行行将所有的的数据读取
step2:将读取到数据输出
3、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
    int num,l;
    char name[21];
    char sex;
    double scores[3];
    double avg;
    double sum;
}s;
int main()
{
    int i;
    FILE *fp=fopen("student.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        exit(1);
    }
    while(fscanf(fp,"%d%d ",&s.num,&s.l)!=EOF)
    {//后面用到fgets,吃一个空格
        fgets(s.name,s.l+1,fp);
        fscanf(fp," %c",&s.sex);//坑哥也是字符,记得吃掉
        fscanf(fp,"%lf%lf%lf%lf%lf",&s.scores[0],&s.scores[1],&s.scores[2],&s.avg,&s.sum);
        printf("%d ",s.num);
        for(i=0;s.name[i]!='\0';i++)
        {
           putchar(s.name[i]);
        }
        printf(" %c %.2lf %.2lf %.2lf %.2lf %.2lf\n",s.sex,s.scores[0],s.scores[1],s.scores[2],s.avg,s.sum);
    }
    fclose(fp);
    return 0;
}

4.运行结果+文件内容
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值