#include
int main ()
{
struct Student
{
int number;
int name;
int class1;
int class2;
int class3;
} student1,student2,student3;
int a,b,c,i;
int hhy (int x,int y);
printf("请输入学号 姓名 三门课的成绩 两者之间空格\n");
scanf("%d %s %d %d %d",&student1.number,&student1.name,&student1.class1,&student1.class2,&student1.class3);
scanf("%d %s %d %d %d",&student2.number,&student2.name,&student2.class1,&student2.class2,&student2.class3);
scanf("%d %s %d %d %d",&student3.number,&student3.name,&student3.class1,&student3.class2,&student3.class3);
b=(student1.class1+student1.class2+student1.class3)/3;
c=(student2.class1+student2.class2+student2.class3)/3;
i=(student3.class1+student3.class2+student3.class3)/3;
printf("student1=%d,student2=%d,student3%d\n",b,c,i);
a=hhy (b,(c,i));
printf("max=%d\n",a);
if (a==b)
printf("%d,%s,%d,%d,%d",student1.number,student1.name,student1.class1,student1.class2,student1.class3);
else if(a==c)
printf("%d,%s,%d,%d,%d",student2.number,student2.name,student2.class1,student2.class2,student2.class3);
else
printf("%d,%s,%d,%d,%d",student3.number,student3.name,student3.class1,student3.class2,student3.class3);
return 0;
}
int hhy (int x,int y)
{
int a;
if (x>y)
a=x;
else
a=y;
return a;
}
不知道为什么会这样,后面还有一个结果没有输出
求大神
你这好像不是c++吧,首先int name;就不对,其次%s是读字符串的,%c才是读单个字符的,如果定义了char name;就得用%c。
结构体里的name是int型的,而在出错的那个printf,对应的格式是%s。
这个问题的本质是内存访问违规。printf是个变长参数函数(这个留个疑问),会把所有参数压栈。printf的实现是遇到%s匹就认为对应的参数是char*,于是从此值对应的地址读取字符串数据。而实际传的是int,即会从这个无效的“地址”读字符串,从而引起内存访问违例
我调试了一下,问题出现在结构体的中name定义上,你把name定义成int,却输入字符串,同时也在用字符串的方式输出,这是一个问题,将name定义为char name[20];问题就解决了。
这分明是C的代码,结构体中int name 却在sscanf中用%s去读进去,显然是不合理的。还有一般运行崩溃掉都是因为访问了不可访问的内存,即segmentation fault
结构体里的定义是int name,但是scanf("%d %s %d %d %d",&student1.number,&student1.name,&student1.class1,&student1.class2,&student1.class3);中%s(student.name)输入的是一个字符串,上面的int name 定义出错了吧,应该定义成char name[40];