主要功能就是输入学生人数,然后就输入学生名字和成绩,但是我这个程序在do while中执行第一次时好像没有执行里边的--i和printf("%d",i),这个printf我主要是用来观察这个i的变化的,然后把do while换成while也不行,我怀疑是不是从申请动态内存那里就错了?但是也没看出来是哪里啊?我是用的VC++6.0弄的
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
char num[10];/*学生名字*/
int score;/*学生成绩*/
struct student *next;
}STUDENT;
STUDENT* create()/*链表*/
{
STUDENT *p,*q,*head;
int i;
scanf("%d",&i);/*输入学生人数*/
head=0;/*表头*/
do
{
p=(STUDENT*)malloc(sizeof(STUDENT));
scanf("%s%d\n",p->num,&p->score);
if(head==0)
{
head=p;/*把第一个结点地址给表头*/
q=p;
}
else
{
q->next=p;/*把当前结点给上一个结点的指针*/
q=p;
}
--i;
printf("%d",i);
}while(i>=0);
p->next=0;
return(head);
}
travel(STUDENT* head)
{
STUDENT* p;
p=head;
while(p->next!=0)
{
printf("%s%d\n",p->num,p->score);
p=p->next;
}
}
main()
{
travel(create());
}
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
char num[10];/*学生名字*/
int score;/*学生成绩*/
struct student *next;
}STUDENT;
STUDENT* create()/*链表*/
{
STUDENT *p,*q,*head;
int i;
scanf("%d",&i);/*输入学生人数*/
head=0;/*表头*/
do
{
p=(STUDENT*)malloc(sizeof(STUDENT));
scanf("%s%d\n",p->num,&p->score);
if(head==0)
{
head=p;/*把第一个结点地址给表头*/
q=p;
}
else
{
q->next=p;/*把当前结点给上一个结点的指针*/
q=p;
}
--i;
printf("%d",i);
}while(i>=0);
p->next=0;
return(head);
}
travel(STUDENT* head)
{
STUDENT* p;
p=head;
while(p->next!=0)
{
printf("%s%d\n",p->num,p->score);
p=p->next;
}
}
main()
{
travel(create());
}