鱼C论坛

 找回密码
 立即注册
查看: 464|回复: 1

为啥没法把数据写到文件里啊,有没有大佬帮忙看一下是啥问题?

[复制链接]
发表于 2021-12-10 21:30:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//数据结构定义
#define MAX_STU_NUM 30//最大学生人数
#define MAX_SUB_NUM 6//最大科目数
#define MAX 100
char *subject_name[MAX_SUB_NUM];//储存课程的名称
typedef struct {
    int num;//学号
    char name[MAX];//姓名
    int score[MAX_SUB_NUM];//成绩
    int sum;//各科成绩总分
    int des_score_rank;//降序按总分排序的名次
    int aec_score_rank;//升序按总分排序的名次
    int aec_num_rank;//升序按学号排序的名次
    int name_rank;//按名字字典顺序排序的名次
} STUDENT;
typedef struct {
    int A;//优秀
    int B;//良好
    int C;//中等
    int D;//及格
    int F;//不及格
    double Arate;
    double Brate;
    double Crate;
    double Drate;
    double Frate;
} EvaluateCourse[MAX_SUB_NUM];

//函数原型
void InputRecord(STUDENT stu[], int *num, int *subnum);//录入学生的学号、姓名和各科考试成绩
void CalculateCourse(STUDENT stu[], int num, int subnum, int course_sum[], double course_average[]);//计算每门课程的总分和平均分
void CalculateStudent(STUDENT stu[], int num, int subnum, double stu_course_ave[]);//计算每个学生的总分和平均分
void DesSortScore(STUDENT stu[], int num, int subnum);//按每个学生的总分由高到低排出名次表
void AscSortScore(STUDENT stu[], int num, int subnum);//按每个学生的总分由低到高排出名次表
void AesSortNum(STUDENT stu[], int num, int subnum);//按学号由小到大排出成绩表
void SortName(STUDENT stu[], int num, int subnum);//按姓名的字典顺序排出成绩表
void NumSearch(STUDENT stu[], int num, int subnum);//按学号查询学生排名及其考试成绩
void NameSearch(STUDENT stu[], int num, int subnum);//按姓名查询学生排名及其考试成绩
void JudgeScore(STUDENT stu[], int num,
                int subnum);//按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比
void OutputStuInfo(STUDENT stu[], int num, int subnum, int course_sum[],
                   double course_average[]);//输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分
void WriteToFile(STUDENT stu[], int num, int subnum,int course_sum[],double course_average[]);//将每个学生的记录信息写入文件
void ReadFromFile(STUDENT stu[], int *num, int *subnum);//从文件中读出每个学生的记录信息并显示
int main() {
    int cmd;
    int num, subnum;
    int course_sum[MAX_SUB_NUM]={-1};
    double course_average[MAX_SUB_NUM]={-1};
    double stu_course_ave[MAX_STU_NUM]={-1};
    STUDENT stu[MAX_STU_NUM];
    FILE *fp;
    do {
        printf("1.Input record\n"
               "2.Calculate total and average score of every course\n"
               "3.Calculate total and average score of every student\n"
               "4.Sort in descending order by total score of every student\n"
               "5.Sort in ascending order by total score of every student\n"
               "6.Sort in ascending order by number\n"
               "7.Sort in dictionary order by name\n"
               "8.Search by number\n"
               "9.Search by name\n"
               "10.Statistic analysis for every course\n"
               "11.List record\n"
               "12.Write to a file\n"
               "13.Read from a file\n"
               "0.Exit\n"
               "Please enter your choice:");
        scanf("%d", &cmd);
        switch (cmd) {
            case 0:
                printf("退出系统成功!\n");
                break;
            case 1:
                InputRecord(stu, &num, &subnum);
                break;
            case 2:
                CalculateCourse(stu, num, subnum, course_sum, course_average);
                break;
            case 3:
                CalculateStudent(stu, num, subnum, stu_course_ave);
                break;
            case 4:
                DesSortScore(stu, num, subnum);
                break;
            case 5:
                AscSortScore(stu, num, subnum);
                break;
            case 6:
                AesSortNum(stu, num, subnum);
                break;
            case 7:
                SortName(stu, num, subnum);
                break;
            case 8:
                NumSearch(stu, num, subnum);
                break;
            case 9:
                NameSearch(stu, num, subnum);
                break;
            case 10:
                JudgeScore(stu, num, subnum);
                break;
            case 11:
                OutputStuInfo(stu, num, subnum, course_sum, course_average);
                break;
            case 12:
                WriteToFile(stu, num, subnum,course_sum,course_average);
                break;
            case 13:
                ReadFromFile(stu, &num, &subnum);
                break;
            default:
                printf("输入的数字不正确,请重新输入!\n");

        }
    } while (cmd != 0);
    return 0;
}
void WriteToFile(STUDENT stu[], int num, int subnum,int course_sum[],double course_average[]) {
    int i,j;
    FILE *fp;
    fp = fopen("output.txt", "w");
    if (!fp) {
        printf("打开文件失败!\n");
        exit(-1);
    }
    printf("向文件中写入学生信息成功!\n");
    fprintf(fp,"%-10s%-10s","学号","姓名");
    for(i=0;i<subnum;i++)
    {
        fprintf(fp,"%-10s",subject_name[i]);
    }
    fprintf(fp,"\n");
    for (i = 0; i < num; i++) {
        fprintf(fp,"%-10d", stu[i].num);
        fprintf(fp,"%-10s", stu[i].name);
        for (j = 0; j < subnum; j++) {
            fprintf(fp,"%-10d",  stu[i].score[j]);
        }
        fprintf(fp,"\n");
    }
    if(course_sum[0]==-1)
    {
        fprintf(fp,"还没有计算课程总分及均分!\n");
        return;
    }
    else {
        fprintf(fp,"每门课程的总分和均分为:\n");
        fprintf(fp,"%-10s%-10s%-10s\n","学科","总分","均分");
        for (i = 0; i < subnum; i++) {
            fprintf(fp,"%-9s%-9d%-10.1lf\n", subject_name[i], course_sum[i],course_average[i]);
        }
    }
    fclose(fp);
}

void ReadFromFile(STUDENT stu[], int *num, int *subnum) {
    FILE *fp;
    fp = fopen("data.txt", "r");
    if (!fp) {
        printf("打开文件失败!\n");
        exit(-1);
    }
    printf("从文件中读取学生信息成功!\n");
    int i, j;
    fscanf(fp, "%d%d", num, subnum);
    for (i = 0; i < *subnum; i++) {
        subject_name[i] = (char *) malloc(MAX * sizeof(char));
        fscanf(fp, "%s", subject_name[i]);
    }
    for (i = 0; i < *num; i++) {
        stu[i].des_score_rank = stu[i].aec_score_rank = stu[i].aec_num_rank = stu[i].name_rank = 0;//初始化排名
        fscanf(fp, "%d", &stu[i].num);
        fscanf(fp, "%s", stu[i].name);
        for (j = 0; j < *subnum; j++) {
            fscanf(fp, "%d", &stu[i].score[j]);
        }
    }
    printf("从文件中读取的学生信息如下:\n");
    printf("%-10s%-10s","学号","姓名");
    for(i=0;i<*subnum;i++)
    {
        printf("%-10s",subject_name[i]);
    }
    putchar('\n');
    for (i = 0; i < *num; i++) {
        printf("%-10d", stu[i].num);
        printf("%-10s", stu[i].name);
        for (j = 0; j < *subnum; j++) {
            printf("%-10d",  stu[i].score[j]);
        }
        putchar('\n');
    }
    fclose(fp);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-10 21:57:57 | 显示全部楼层
打开文件成功了,但是当调用完WriteToFile函数后,文件是空白的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-18 06:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表