如图,这是一个输入信息、打印信息、比较信息的小程序,但是在最后运行的时候红框里部分输出是随机值,请问什么原因?
#include<stdio.h>
#include<stdlib.h>
struct student
{
char name[50];
int age;
int score;
};
void setinfo(struct student *ws,int a )
{
int i;
for(i = 0;i < a;i++)
{
printf("请输入第%d个人信息\n",i+1);
scanf("%s%d%d",ws[i].name,&ws[i].age,&ws[i].score);
}
}
void showinfo(struct student *p,int n)
{
int i;
for(i = 0;i < n;i++)
{
printf("name is %s\n age is %d\n score is %d\n ",p[i].name,p[i].age,p[i].score);
}
}
void getmax(struct student*q,int c)
{
int i,max=0;
max = q[0].score;
for(i = 1;i <c ;i++)
{
if(max < q[i].score)
{
max = q[i].score;
}
}
printf("%s %d %d\n",q[i].name,q[i].age,q[i].score);
}
int main()
{
int n;
printf("请输入人数:\n");
scanf("%d",&n);
struct student *p = (struct student*)malloc(n*sizeof(struct student));
setinfo(p,n);
// getmax(p,n);
showinfo(p,n);
getmax(p,n);
free(p);
return 0;
}
第38行,i已经是3了
void getmax(struct student*q,int c)
{
int i,j,max=0;
max = q[0].score;
j=0;
for(i = 1;i <c ;i++)
{
if(max < q[i].score)
{
max = q[i].score;
j=i;
}
}
printf("%s %d %d\n",q[j].name,q[j].age,q[j].score);
}
getmax 的时候 最后打印时 i 为 3,需要在获取最大值时,获取最大值对应的下标
void getmax(struct student*q,int c)
{
int i,max=0, max_index = 0;
max = q[0].score;
for(i = 1;i <c ;i++)
{
if(max < q[i].score)
{
max = q[i].score;
max_index = i;
}
}
printf("%s %d %d\n",q[max_index].name,q[max_index].age,q[max_index].score);
}
访问未申请的内存,可能获得随机值,可能造成程序异常退出
不知道你这个问题是否已经解决, 如果还没有解决的话:根据这个表格可以简单确定至少有6钟状态,考虑到帧头有2个字节,用两个状态来表示,同理校验有2个字节也用2种状态来表示。故一共8种状态,分别是: