#include
struct yuan{
char p; //员工姓名
int b; //基本工资
int c; //职务工资
};
int main()
{ struct yuan a[2];
int i,f,q;
printf("请分别输入员工名字及其基本工资和职务工资:\n");
for(i=0;i<3;i++){
scanf("%s%d%d",&a[i].p,&a[i].b,&a[i].c);
}
f=a[0].b+a[0].c;
for(i=0;i<3;i++){
if(f<=a[i].b+a[i].c)
f=a[i].b+a[i].c;
}
for(i=0;i<3;i++){
if(f==a[i].b+a[i].c)
break;
}
printf("%s %d %d\n",a[i].p,a[i].b,a[i].c);
q=a[0].b+a[0].c;
for(i=0;i<3;i++){
if(q>=a[i].b+a[i].c)
q=a[i].b+a[i].c;
}
for(i=0;i<3;i++){
if(q==a[i].b+a[i].c)
break;
}
printf("%s %d %d",a[i].p,a[i].b,a[i].c);
return 0;
}
题目要求是输出最高工资和最低工资总和的员工的姓名和基本工资 职务工资。
调试没问题,运行出来就有 It stopped with signal SIGSEGV,Segmentation fault
菜鸟求教啊。。。。
for(i=0;i<3;i++)
{
if(q==a[i].b+a[i].c)
break;
}
printf("%s %d %d",a[i].p,a[i].b,a[i].c);
例如main函数中的这段代码,当你执行for循环的时候,如果没有满足if条件,那么i的值最后会等于3,a[3].p,a[3].b,a[3].c是不存在的,此时如果调用printf输出a[3].p,a[3].b,a[3].c,将访问越界。所以你应该重新考虑一下代码结构及相关循环变量的取值。
补充:struct yuan a[2]; 在这个数组中只有两个元素,所以你循环变量的i值肯定不能写成i<3,而应该写成i<2。
可是q的值一定会满足三个中的其中一个的啊, for(i=0;i if(q>=a[i].b+a[i].c)
q=a[i].b+a[i].c;
}