//定义结构体//
struct achievement
{
int number;
char name[20];
char sex;
int achievement1,achievement2,achievement3;
} tab_achievement[n];
void line3()
{
int j[10],i;
int k;
for(i=0; i<n; i++)
j[i]=0;
for(i=0; i<n; i++)
{
k=tab_achievement[i].achievement3/10;
j[k]++;
}
printf("answer\n");
for(i=0; i<10; i++)
printf("%3d--%3d:%6d\n",i*10,(i+1)*10-1,j[i]);
}
for(i=0; i<n; i++)
{
k=tab_achievement[i].achievement3/10;
j[k]++;
}
j[k]有可能越界了,这个与你tab_achievement[i].achievement3的值有关
achievement是不是最大为100?j[]最大索引为9,数组 tab_achievement的维数怎么用n?定义了这个宏还是?
修改为:k=tab_achievement[i].achievement3%10;
这样就不会越界了。
凭我的直觉楼上应该是对
我想你上面的程序是想统计每个10分分数段的人数吧(0-9, 10-19,...)?
你的程序里面学生数一定少于10个吗,应该不是吧?
你定义了j[10],而后有for(i = 0; i < n; i++) j[i] = 0;如果学生数大于10个,则数组越界。
如果你是要统计每个10分分数段,总分100分的话,那么应该是定义j[11], for(i = 0; i <= 10; i++) j[i] = 0;,否则你就会漏掉100分的那些同学们。