c语言链表输入问题
发布网友
发布时间:2022-04-26 07:15
我来回答
共5个回答
热心网友
时间:2023-10-08 21:21
你的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 十六进制数
%% 输出百分号%
仅供参考.
热心网友
时间:2023-10-08 21:21
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分别是字符串和浮点数的输入格式!
热心网友
时间:2023-10-08 21:22
#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;
}
}
热心网友
时间:2023-10-08 21:22
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;
}
热心网友
时间:2023-10-08 21:23
....太深奥 =高手回答吧