c语言使用txt文档星座输入

问题遇到的现象和发生背景

做一个小程序来展示学生的基本信息,现在就想把星座也加进去,但是现在只做了统计,星座加入太麻烦,想问问有没有更便捷的方法。

用代码块功能插入代码,请勿粘贴截图

-

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

void readFile();//读取
void show();//展示
void constellations();//星座

struct student
{
    char name[30];
    char ID[30];
    char class_num[30];
    char gender;
    float height;
    int age;
    struct Date
{
    int year;
    int month;
    int day;
}   birthday;
    int weight;
    int score;

}stu[30];//模块数组

int stu_num = 0;    

int main()
{

    readFile();
    show();
    constellations();
    system("pause");
}//主函数

void readFile()
{
    char filename[30];
    printf("输入要读取的文件名:\n");
    scanf("%s",filename);
    FILE *fp = fopen(filename,"r");
    if(fp == NULL)
    {
        printf("文件读取失败\n");
        readFile();
    }else
    {
            while((fscanf(fp,"%s %s %s %c %d %d %d %d %f %d %d",
            stu[stu_num].name,stu[stu_num].ID,stu[stu_num].class_num,&stu[stu_num].gender,&stu[stu_num].age,
            &stu[stu_num].birthday.year,&stu[stu_num].birthday.month,&stu[stu_num].birthday.day,
            &stu[stu_num].height,&stu[stu_num].weight,&stu[stu_num].score)) != EOF)
            {
                stu_num++;
            }
    }
}//读取函数

void show()
{
    int i;
    for ( i = 0; i < stu_num; i++)
    {

    printf("%s %s %s %c %d %d %d %d %.2f %d %d \n",
    stu[i].name,stu[i].ID,stu[i].class_num,stu[i].gender,stu[i].age,
    stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].height,stu[i].weight,stu[i].score);
    }


}//展示函数

void constellations()
{
    int baiyang = 0;    int jinniu = 0;    int shuangzi = 0;    int juxie = 0;
    int shizi = 0;    int chunv = 0;    int tiancheng = 0;    int tianxie = 0;
    int sheshou= 0;    int mojie = 0;    int shuiping= 0;    int shuangyu = 0;
    int i = 0;   int month = stu[i].birthday.month;    int day = stu[i].birthday.day;
    for ( i = 0; i < stu_num; i++)
    {
        switch (month)
        {
        case 1:if(day<21)
        {
            mojie++;
        }else
        {
            shuiping++;
        }
            break;
        case 2:if (day<20)
        {
            shuiping++;
        }else
        {
            shuangyu++;
        }
            break;
        case 3:if (day<22)
        {
            shuangyu++;
        }else
        {
            baiyang++;
        }
            break;
        case 4:if(day<21)
        {
            baiyang++;
        }else
        {
            jinniu++;
        }
            break;
        case 5:if (day<22)
        {
            jinniu++;
        }else
        {
            shuangzi;
        }
            break;
        case 6:if (day<23)
        {
            shuangzi++;
        }else
        {
            juxie++;
        }
            break;
        case 7:if(day<24)
        {
            juxie++;
        }else
        {
            shizi++;
        }
            break;
        case 8:if (day<24)
        {
            shizi++;
        }else
        {
            chunv++;
        }
            break;
        case 9:if (day<24)
        {
            chunv++;
        }else
        {
            tiancheng++;
        }
            break;
        case 10:if (day<25)
        {
            tiancheng++;
        }else
        {
            tianxie++;
        }
            break;
        case 11:if (day<24)
        {
            tianxie++;
        }else
        {
            sheshou++;
        }
            break;
        case 12:if(day<23)
        {
            sheshou++;
        }else
        {
            mojie++;
        }
            break;
        }
    }
        printf("白羊%d人\n",baiyang);
}



运行结果及报错内容

img

我想要达到的结果

想把星座加入到人名后面,通过新建一个函数加switch可以达到效果,但是太复杂,求一个简便一点的解答,谢谢

往往越简单的逻辑越好,没有一定的基本功和算法能力不要去优化代码,就用你这样就很好很直观,而且效率也很高。