为了账号安全,请及时绑定邮箱和手机立即绑定

动态链表错哪了,怎么只能输入输出一次

动态链表错哪了,怎么只能输入输出一次

C
溯源1 2017-01-21 22:40:40
#include "stdio.h"#include<malloc.h>#include<string.h>#include<ctype.h>#define LEN struct studentstruct student{ int num; int score; struct student*next;};struct student*create(){ char ch;    struct student *head;    struct student*p1,*p2;    int a=0;    printf("是否输入新数据:\n");    while(toupper(ch=getchar())=='Y')    {      p1=(LEN*)malloc(sizeof(LEN));      scanf("%d%d",&(*p1).num,&(*p1).score);      a++;      if(a==1)       head=p1;      else       (*p2).next=p1;      p2=p1;      p1->next=NULL;      }    return(head);}void print(struct student *head){ struct student *p; p=head; while(p!=NULL) { printf("\n学号:%d,成绩:%d",p->num,p->score); p=p->next; }}void main( ){ print(create());}
查看完整描述

1 回答

已采纳
?
zy112

TA贡献8条经验 获得超10个赞

getchar() 会接受回车, 所以你在输入了学号和成绩之后,你会输入回车,然后getchar() 就会接受回车, 不等于 Y , 所以输入就结束了, 你在while 后面输入一个getchar()就可以了。。如下。

struct student*create()
{
char ch;
    struct student *head;
    struct student*p1,*p2;
    int a=0;
    printf("是否输入新数据:\n");
    while(toupper(ch=getchar())=='Y')
    {

      p1=(LEN*)malloc(sizeof(LEN));
      scanf("%d%d",&(*p1).num,&(*p1).score);
      a++;
      if(a==1)
       head=p1;
      else
       (*p2).next=p1;
      p2=p1;
      p1->next=NULL;
      
      getchar();

      }
    return(head);
}


查看完整回答
1 反对 回复 2017-01-22
  • 1 回答
  • 0 关注
  • 1419 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信