做一个小程序来展示学生的基本信息,现在就想把星座也加进去,但是现在只做了统计,星座加入太麻烦,想问问有没有更便捷的方法。
-
#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);
}
想把星座加入到人名后面,通过新建一个函数加switch可以达到效果,但是太复杂,求一个简便一点的解答,谢谢
往往越简单的逻辑越好,没有一定的基本功和算法能力不要去优化代码,就用你这样就很好很直观,而且效率也很高。