c语言赋值自动,一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',不知道为什么?...

已结贴√

问题点数:20 回复次数:22

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',不知道为什么?

aa创建一个学生信息系统,有输入,打印,查找与修改功能,在修改功能函数中出现了问题,一个scanf函数不需要我赋值就被自动赋值,调试测出来自动赋值为'10',问题具体位置在注释中,不知道为什么会自动赋值,自己对该scanf函数也无法赋值??

#include

#include

#include

#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;

}

搜索更多相关主题的帖子:

include 信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值