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


#include "stdio.h"

#include<malloc.h>

#include<string.h>

#include<ctype.h>

#define LEN struct student


struct 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
浏览 1366回答 1
1回答

zy112

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); }
打开App,查看更多内容
随时随地看视频慕课网APP