...表示学生有关信息的描述(姓名、出生日期的年月日)
发布网友
发布时间:2024-05-09 18:10
我来回答
共3个回答
热心网友
时间:2024-06-03 14:25
哦,因为是自己的电脑没装VC没法调试查错,我只说说你比较明显的错误吧,struct是定义一个结构体作为变量类型,定义结构体的格式时要用类似struct date{int year;int month;int day;};这样的形势,但是在定义结构体的实例时,直接用date x,y;就可以了,也就是定义了一个名为date的结构体类型,它和int,float这样的变量类型用法是类似的。
原程序中,第2行的int compare(struct date x,struct date y)应为int compare(date x,date y),不过要注意struct date{int year;int month;int day;};语句应出现在本行以前。
倒数第8行的struct student *p;应为student *p;
我把你原先的程序大致改了一下,没有细看,细节上你自己再查查吧,应该问题不大了:
#include<stdio.h>
struct date{int year;int month;int day;}; //定义日期结构体类型
struct student
{ char name[20];
char sex;
struct date birth;
};
int compare(date x,date y)
{ int flag;
if(x.year>y.year) flag=1;
else if(x.year<y.year) flag=0;
else
{ if(x.month>y.month) flag=1;
else if(x.month<y.month) flag=0;
else
{ if(x.day>y.day) flag=1;
else if(x.day<y.day) flag=0;
else flag=-1;
}
}
return flag;
}
void main()
{
int i;
student s[4];
student p;
p=s[0];
for(i=0;i<4;i++)
scanf("%s%c%d%d%d",s[i].name,&s[i].sex,&s[i].birth.year,&s[i].birth.month,&s[i].birth.day);
for(i=0;i<4;i++)
if(compare(p->birth,s[i].birth)==0) p=s[i];
printf("年龄最大者的姓名::%s\n",p->name);
}
针对输入部分我补充一下,你的输入通配符,中间没有间隔符,比如逗号或分号,比较容易混淆,我建议你详细一点写。另外,p不用定义成指针,结构体之间相互复制可以直接用等号的。
如果要我写输入,我会这么写的(你可以参考下,个人习惯不同,我是比较喜欢排除一切意外的):
for(i=0;i<4;i++)
{ printf("请输入第%d个人的姓名:",i+1);
scanf("%s",&s[i].name);
printf("请输入第%d个人的性别:",i+1);
scanf("%c",&s[i].sex);
……
}
注意以下,scanf的参数前面要带&表示是回传数值。
热心网友
时间:2024-06-03 14:30
struct date{int year;int month;int day;};
struct student
{ char name[20];
char sex;
struct date birth;
}s[4];
这个放在头文件下面
热心网友
时间:2024-06-03 14:27
沙维调整了下,编译没有错。
数据结构的定义最好放到.H文件。
另外就是注意程序的排版。可读性太差了。
友情提示:出生日期如果是用字符串的话。。直接字符串比较大小会简单的多。
18740214可定比20010101要小的多。字符串完全可以比较出来,不用分什么年月日。IF条件看的纠结。