c语言链表输入问题
我想输入3个学生数据到student中,包括学号,姓名,3门成绩,但是用链表时,运行只能输入学号,姓名,输入成绩时出现问题,无法输入,直接进入下次循环,也无法输入了,请高...
我想输入3个学生数据到student中,包括学号,姓名,3门成绩,但是用链表时,运行只能输入学号,姓名,输入成绩时出现问题,无法输入,直接进入下次循环,也无法输入了,请高手指教。前面是菜单函数,应该包括五个功能,我还没写完,不必理会。
#include<stdio.h>
#include<stdlib.h>
void menu()
{
printf("MENU\n");
printf("0.输入\n");
printf("1.显示\n");
printf("2.删除\n");
printf("3.查找\n");
printf("4.插入\n");
}
struct student
{
int i;
char no[11]; /*学号由10个字符组成*/
char name[15]; /* 学生姓名*/
int score[3]; /*各门课成绩*/
float sum; /*总分*/
float average; /*平均分*/
int order; /*名次*/
struct student *next; /*指向后继结点的指针*/
};
struct student *p,*head;
void input()
{int i,n;
head=(struct student*)malloc(sizeof(struct student));
p=head;
printf("请输入数据个数");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学生学号\n");
scanf("%d",p->no);
printf("请输入学生姓名\n");
scanf("%c\n",p->name);
printf("请输入学生成绩\n");
for(i=0;i<3;i++)
scanf("%d\n",&p->score[i]);
p->next=(struct student*)malloc(sizeof(struct student));
if(i==n) p->next=NULL;
else p=p->next;
}
}
void output()
{
int i;
p=head;
printf("学号\t姓名\t成绩\t");
while(p!=NULL)
{
printf("%d%c",p->no,p->name);
for(i=0;i<3;i++)
printf("%d,%d,%d",&p->score[i]);
p=p->next;
}
}
void main()
{
int i;
menu();
printf("请选择\n");
scanf("%d",&i);
switch(i)
{
case 0:input();break;
case 1:output();break;
}
} 展开
#include<stdio.h>
#include<stdlib.h>
void menu()
{
printf("MENU\n");
printf("0.输入\n");
printf("1.显示\n");
printf("2.删除\n");
printf("3.查找\n");
printf("4.插入\n");
}
struct student
{
int i;
char no[11]; /*学号由10个字符组成*/
char name[15]; /* 学生姓名*/
int score[3]; /*各门课成绩*/
float sum; /*总分*/
float average; /*平均分*/
int order; /*名次*/
struct student *next; /*指向后继结点的指针*/
};
struct student *p,*head;
void input()
{int i,n;
head=(struct student*)malloc(sizeof(struct student));
p=head;
printf("请输入数据个数");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学生学号\n");
scanf("%d",p->no);
printf("请输入学生姓名\n");
scanf("%c\n",p->name);
printf("请输入学生成绩\n");
for(i=0;i<3;i++)
scanf("%d\n",&p->score[i]);
p->next=(struct student*)malloc(sizeof(struct student));
if(i==n) p->next=NULL;
else p=p->next;
}
}
void output()
{
int i;
p=head;
printf("学号\t姓名\t成绩\t");
while(p!=NULL)
{
printf("%d%c",p->no,p->name);
for(i=0;i<3;i++)
printf("%d,%d,%d",&p->score[i]);
p=p->next;
}
}
void main()
{
int i;
menu();
printf("请选择\n");
scanf("%d",&i);
switch(i)
{
case 0:input();break;
case 1:output();break;
}
} 展开
5个回答
展开全部
你的scanf("%c\n",p->name); scanf("%d\n",&p->score[i]); 改为scanf("%d",&p->score[i]); scanf("%s",p->name); 除此;
你的input()函数定义有问题,我试着给你改了下,你验证下是否可以,为了操作简便,我对你的结构体进行了重新定义:
typedef struct student node;
typedef node *llink;
下面是对你的input()函数的重新实现:
llink input()
{
llink head;
llink ptr,ptr1;
int i=0,n=0;
printf("请输入数据个数");
scanf("%d",&n);
head=(llink)malloc(sizeof(node));
if(!head)
return NULL;
printf("请输入学生学号\n");
scanf("%d",head->no);
printf("请输入学生姓名\n");
scanf("%s\n",head->name);
printf("学号\t姓名\t成绩\t");
scanf("%d\n",&head->score[i]);
head->next=NULL;
ptr=head;
for(i=1;i<n;i++)
{
ptr1=(llink)malloc(sizeof(node));
if(!ptr1)
return NULL;
printf("请输入学生学号\n");
scanf("%s",ptr1->no); //你把你的学号定义为char数组了.
printf("请输入学生姓名\n");
scanf("%s",ptr1->name);
printf("请输入学生成绩\n");
scanf("%d",&p->score[i]);
ptr1->next=NULL;
ptr1-next=ptr1;
ptr=ptr->next;
}
return head;
}
链表的插入操作必须有一个游动指针,必须含有
ptr1->next=NULL;
ptr1-next=ptr1;
ptr=ptr->next;
这几步关键语句;
其次关于printf()函数的格式化输出:
%c 单个字符
%d 十进制整数
%f 十进制浮点数
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
%% 输出百分号%
仅供参考.
你的input()函数定义有问题,我试着给你改了下,你验证下是否可以,为了操作简便,我对你的结构体进行了重新定义:
typedef struct student node;
typedef node *llink;
下面是对你的input()函数的重新实现:
llink input()
{
llink head;
llink ptr,ptr1;
int i=0,n=0;
printf("请输入数据个数");
scanf("%d",&n);
head=(llink)malloc(sizeof(node));
if(!head)
return NULL;
printf("请输入学生学号\n");
scanf("%d",head->no);
printf("请输入学生姓名\n");
scanf("%s\n",head->name);
printf("学号\t姓名\t成绩\t");
scanf("%d\n",&head->score[i]);
head->next=NULL;
ptr=head;
for(i=1;i<n;i++)
{
ptr1=(llink)malloc(sizeof(node));
if(!ptr1)
return NULL;
printf("请输入学生学号\n");
scanf("%s",ptr1->no); //你把你的学号定义为char数组了.
printf("请输入学生姓名\n");
scanf("%s",ptr1->name);
printf("请输入学生成绩\n");
scanf("%d",&p->score[i]);
ptr1->next=NULL;
ptr1-next=ptr1;
ptr=ptr->next;
}
return head;
}
链表的插入操作必须有一个游动指针,必须含有
ptr1->next=NULL;
ptr1-next=ptr1;
ptr=ptr->next;
这几步关键语句;
其次关于printf()函数的格式化输出:
%c 单个字符
%d 十进制整数
%f 十进制浮点数
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
%% 输出百分号%
仅供参考.
展开全部
printf("请输入学生学号\n");
scanf("%d",p->no); ///////////////应该是scanf("%s",p->no);
printf("请输入学生姓名\n");
scanf("%c\n",p->name); ///////////////应该是scanf("%s",p->name);
printf("请输入学生成绩\n");
for(i=0;i<3;i++)
scanf("%d\n",&p->score[i]); ///////////////应该是scanf("%f",&p->score[i]);
注意:上面的%s,%f分别是字符串和浮点数的输入格式!
scanf("%d",p->no); ///////////////应该是scanf("%s",p->no);
printf("请输入学生姓名\n");
scanf("%c\n",p->name); ///////////////应该是scanf("%s",p->name);
printf("请输入学生成绩\n");
for(i=0;i<3;i++)
scanf("%d\n",&p->score[i]); ///////////////应该是scanf("%f",&p->score[i]);
注意:上面的%s,%f分别是字符串和浮点数的输入格式!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<stdlib.h>
void menu()
{
printf("MENU\n");
printf("0.输入\n");
printf("1.显示\n");
printf("2.删除\n");
printf("3.查找\n");
printf("4.插入\n");
}
struct student
{
int i;
char no[11]; /*学号由10个字符组成*/
char name[15]; /* 学生姓名*/
int score[3]; /*各门课成绩*/
float sum; /*总分*/
float average; /*平均分*/
int order; /*名次*/
struct student *next; /*指向后继结点的指针*/
};
struct student *p,*head;
void input()
{int i,n;
head=(struct student*)malloc(sizeof(struct student));
p=head;
printf("请输入数据个数");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学生学号\n");
scanf("%s",p->no); //
printf("请输入学生姓名\n");
scanf("%s",p->name); //
printf("请输入学生成绩\n");
for(int j=0;j<3;j++) //这里也需要修改
scanf("%d",&p->score[j]);
p->next=(struct student*)malloc(sizeof(struct student));
if(i==n) p->next=NULL;
else p=p->next;
}
}
void output()
{
int i;
p=head;
printf("学号\t姓名\t成绩\t");
while(p!=NULL)
{
printf("%d%c",p->no,p->name);
for(i=0;i<3;i++)
printf("%d,%d,%d",&p->score[i]);
p=p->next;
}
}
void main()
{
int i;
menu();
printf("请选择\n");
scanf("%d",&i);
switch(i)
{
case 0:input();break;
case 1:output();break;
}
}
#include<stdlib.h>
void menu()
{
printf("MENU\n");
printf("0.输入\n");
printf("1.显示\n");
printf("2.删除\n");
printf("3.查找\n");
printf("4.插入\n");
}
struct student
{
int i;
char no[11]; /*学号由10个字符组成*/
char name[15]; /* 学生姓名*/
int score[3]; /*各门课成绩*/
float sum; /*总分*/
float average; /*平均分*/
int order; /*名次*/
struct student *next; /*指向后继结点的指针*/
};
struct student *p,*head;
void input()
{int i,n;
head=(struct student*)malloc(sizeof(struct student));
p=head;
printf("请输入数据个数");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入学生学号\n");
scanf("%s",p->no); //
printf("请输入学生姓名\n");
scanf("%s",p->name); //
printf("请输入学生成绩\n");
for(int j=0;j<3;j++) //这里也需要修改
scanf("%d",&p->score[j]);
p->next=(struct student*)malloc(sizeof(struct student));
if(i==n) p->next=NULL;
else p=p->next;
}
}
void output()
{
int i;
p=head;
printf("学号\t姓名\t成绩\t");
while(p!=NULL)
{
printf("%d%c",p->no,p->name);
for(i=0;i<3;i++)
printf("%d,%d,%d",&p->score[i]);
p=p->next;
}
}
void main()
{
int i;
menu();
printf("请选择\n");
scanf("%d",&i);
switch(i)
{
case 0:input();break;
case 1:output();break;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、将
scanf("%d",p->no);
修改为
scanf("%s",p->no);
2、将
scanf("%c\n",p->name);
修改为
scanf("%s\n",p->name);
3、将
if(i==n) p->next=NULL;
修改为
if(i==n-1)
{
free(p->next);
p->next=NULL;
}
scanf("%d",p->no);
修改为
scanf("%s",p->no);
2、将
scanf("%c\n",p->name);
修改为
scanf("%s\n",p->name);
3、将
if(i==n) p->next=NULL;
修改为
if(i==n-1)
{
free(p->next);
p->next=NULL;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
....太深奥 =高手回答吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询