一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',不知道为什么?
aa创建一个学生信息系统,有输入,打印,查找与修改功能,在修改功能函数中出现了问题,一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',问题具体位置在注释中,不知道为什么会自动赋值,自己对该scanf函数也无法赋值??#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(struct Student)
struct Student
{
int num;
char name[20];
float score[3];
struct Student *next;
};
struct Student *creat(void) //创建学生信息链表
{
struct Student *head;
struct Student *p1;
struct Student *p2;
p1=(struct Student*)malloc(LEN);
head=p1,p2=p1;
printf("请按格式输入学生信息,当输入学号为零时,输入结束\n");
printf("输入学号:");
scanf("%d",&p1->num);
if(p1->num==0)
{
printf("输入无效,请重新输入");
printf("输入学号:");
scanf("%d",&p1->num);
}
printf("输入姓名:");
scanf("%s",p1->name);
printf("成绩:语文 数学 英语 ");
scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
while(p1->num!=0)
{
p1=(struct Student*)malloc(LEN);
printf("输入学号:");
scanf("%d",&p1->num);
if(p1->num==0) break;
printf("输入姓名:");
scanf("%s",p1->name);
printf("成绩:语文 数学 英语 ");
scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
printf("输入结束!\n");
return head;
}
void print(struct Student *head) //输出学生信息链表
{
struct Student *p;
int i;
float ave,sum;
sum=0;
p=head;
printf("\n");
printf("学生信息如下\n");
printf("学号 姓名 语文 数学 英语 平均分\n");
while(p!=NULL)
{
printf("%2d ",p->num);
printf("%5s ",p->name);
for(i=0;i<3;i++)
{ sum=sum+p->score[i];
printf("%5.1f ",p->score[i]);
}
ave=sum/3;
printf(" %4.1f",ave);
printf("\n");
p=p->next;
}
}
void search(struct Student *head) //查找,修改某个学生信息功能
{ struct Student *p;
int i,num,zhaodao; //zhaodao代表找到,用于最后判断链表中有无要查找学生的信息
float sum,ave;
char yes; //yes用于找到该生后判断是否修改该生信息
sum=0;
zhaodao=0;
printf("输入你要查找学生的学号 ");
scanf("%d",&num);
p=head;
while(p!=NULL)
{
if(p->num==num)
{
printf("您要找的学生信息\n");
printf("学号 姓名 语文 数学 英语 平均分\n");
printf("%2d ",p->num);
printf("%5s ",p->name);
for(i=0;i<3;i++)
{ sum=sum+p->score[i];
printf("%5.1f ",p->score[i]);
}
ave=sum/3;
printf(" %4.1f\n",ave);
zhaodao=1; //zhaodao为1代表该生找到了
printf("是否要修改该生信息:y/n?"); //问题出在这里,这个地方的yes ,不需要我赋值,总是被自动赋值,调试测出来赋值为'10',
scanf("%c",&yes); //运行到这个scanf时,不进行赋值就可以调试到下一行了?是什么原因呀?试了好几遍了?
if(yes=='y')
{
printf("输入该生更新后的信息\n");
printf("输入学号:");
scanf("%d",&p->num);
printf("输入姓名:");
scanf("%s",p->name);
printf("成绩:语文 数学 英语 ");
scanf("%f%f%f",&p->score[0],&p->score[1],&p->score[2]);
}
}
p=p->next;
}
if(zhaodao==0)
printf("\n您找的学生不存在!");
}
int main()
{
struct Student *ahead;
ahead=creat();
print(ahead);
search(ahead);
print(ahead);
return 0;
}