第七章 文件

一、习题

1、编写程序,要求在磁盘中建立一个文本文件text.txt,并往文本文件中输入任意一段文字;

#include <stdio.h>
#include <stdlib.h>

int main(){
	char s[100];
	FILE *fp;
	fp=fopen("test.txt","w+");
	if(fp==NULL)
	{
		printf("文件打开错误");
		exit(1);
	}
	else{
		scanf("%s",s);
		fprintf(fp,"%s",s);
	}
	fclose(fp);
	return 0;
}

2、将题1中的第1,3,5,7个字符读出来,并显示在屏幕上

#include <stdio.h>
#include <stdlib.h>

int main(){
	char ch;
	FILE *fp;
	fp=fopen("test.txt","r");
	if(fp==NULL)
	{
		printf("文件打开错误");
		exit(1);
	}
	else{
		for(int i=1;i<8;i+=2)
		{
			fseek(fp,i*1L,0);
			ch=fgetc(fp);
			printf("%c",ch);
		}
	}
	fclose(fp);
	return 0;
}

3、建立一个磁盘文件,记录学生的信息包含学号、姓名、性别等信息

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char no[10];
    char name[10];
    double foreign;
    double spec1;
    double spec2;
    double total;
} StudentType;

void WriteToFile(void);
void ReadFromFile(void);

int main(void)
{
    int select;
    do
    {
        printf("1.录入成绩 2.输出成绩 0.退出\n");
        printf("请输入要执行的操作: ");
        scanf("%d", &select);
        switch (select)
        {
        case 1:
            WriteToFile();
            break;
        case 2:
            ReadFromFile();
            break;
        default:
            printf("退出程序!\n");
            break;
        }
    } while (select == 1 || select == 2);

    return 0;
}
void WriteToFile(void)
{
    FILE *fp = NULL;
    StudentType stu;
    char flag = 'y';

    fp = fopen("student.txt", "a");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        exit(1); //有错的方式退出
    }

    while (flag == 'y' || flag == 'Y')
    {
        printf("请输入考生考号: ");
        scanf("%s", stu.no);
        printf("请输入考生姓名: ");
        scanf("%s", stu.name);
        printf("请输入考生外语成绩: ");
        scanf("%lf", &stu.foreign);
        printf("请输入考生专业课1成绩: ");
        scanf("%lf", &stu.spec1);
        printf("请输入考生专业课2成绩: ");
        scanf("%lf", &stu.spec2);
        stu.total = stu.foreign + stu.spec1 + stu.spec2;
        fprintf(fp, "%10s%10s%8.2f", stu.no, stu.name, stu.foreign);
        fprintf(fp, "%8.2f%8.2f%8.2f", stu.spec1, stu.spec2, stu.total);
        fputc('\n', fp);
        fflush(stdin);
        printf("继续输入吗?继续请输入y或Y: ");
        scanf("%c", &flag);
    }

    fclose(fp);

    return;
}
void ReadFromFile(void)
{
    FILE *fp = NULL;
    StudentType stu;
    fp = fopen("student.txt", "r");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        exit(1);
    }

    printf("%10s%8s\n", "考生姓名", "总分");
    while (!feof(fp))
    {
        fscanf(fp, "%s%s", stu.no, stu.name);
        fscanf(fp, "%lf%lf%lf%lf", &stu.foreign, &stu.spec1, &stu.spec2, &stu.total);
        if (strlen(stu.name) != 0)
        {
            printf("%10s%8.2f\n", stu.name, stu.total);
            strcpy(stu.name, "");
        }
    }

    fclose(fp);

    return;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值