问题描述
- c-free结构体的问题输入后按回车就出现windows出现问题
-
#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 %dn",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;
}