#include<stdio.h>
int main()
{
int i,j,score[5][5];
float ave[5];
char name[5][10];
for(i=1;i<5;i++)
{
scanf("%s",name[i]);
for(j=1;j<=5;j++)
scanf("%d",score[i][j]);
}
for(i=0;i<5;i++)
{
score[i][5]+=score[i][i];
}
for(i=0;i<=4;i++)
{
for(j=0;j<4;j++)
ave[i]+=score[j][i];
ave[i]=ave[i]/5;
}
printf("姓名 总分 语文 数学 英语 综合\n");
for(i=0;i<5;i++)
{
printf("%6s",name[i]);
for(j=0;j<=4;j++)
printf("%4d",score[i][j]);
printf("\n");
}
printf("课程平均分:");
for(i=1;i<=4;i++)
printf("%.1f",ave[i]);
printf("\n");
return 0;
}
图一
scanf("%d",score[i][j]) score前面带一个&
改成:
scanf("%d",&score[i][j])
很明显这是内存访问问题,记住:
指针或者字符型数组才不要加'&'取址符号,其他都要加,否则运气不好就会访问到不该访问的内存,然后崩掉
你的代码这一类属于给野指针赋值,除此之外还有给空指针赋值,如下:
char * img = NULL;
scanf("%s",img);//崩溃
其中一个问题那个人已经回答了,另一个问题就是数组下标是从0开始,比如说长度为5的数组有效下标范围是0-4,你这样会越界!!