问题遇到的现象和发生背景
我在对照着《啊哈,算法》这边书在学习链表,我试着去创建一个学生管理系统,这是我的代码
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
struct Student {
char name[100];
int age;
char num[100];
struct Student * next;
};
struct Student *head,*q,*p,*t;
int i,n,a,ch;
char buf[100];
printf("请输入学生的数量:");
scanf("%d", &n);
head=NULL;
for(i=0;i<n;i++){
p=(struct Student *)malloc(sizeof(struct Student));
printf("请输入第%d个学生的姓名",i+1);
scanf("%s",buf);
while ((ch = getchar()) != EOF && ch != '\n')
{
;
}
strcpy(buf,p->name);
printf("请输入第%d个学生的年龄",i+1);
scanf("%d",&a);
p->age=a;
printf("请输入第%d个学生的学号",i+1);
scanf("%s",buf);
while ((ch = getchar()) != EOF && ch != '\n')
{
;
}
strcpy(buf,p->num);
p->next=NULL;
if(head==NULL){
head=p;
}else{
q->next = p;
}q=p;
}
t=head;
printf("请输入插班生的年龄");
scanf("%d",&a);
while(t!=NULL){
if(t->next->age > a){
p=(struct Student *)malloc(sizeof(struct Student));
p->age=a;
printf("请输入插班生的学号");
scanf("%s",buf);
while ((ch = getchar()) != EOF && ch != '\n')
{
;
}
strcpy(buf,p->name);
printf("请输入插班生的姓名");
scanf("%s",buf);
while ((ch = getchar()) != EOF && ch != '\n')
{
;
}
strcpy(buf,p->name);
t->next=p->next;
p=t->next;
break;
}
t=t->next;
}
t=head;i=1;
while(t!=NULL){
printf("%d 位:",i);
puts(p->name);
printf("%d ",p->age);
puts(p->num);
i++;
t=t->next;
}
getchar();
getchar();
return 0;
}
运行结果及报错内容
当我在输入完结果等待输出时,只输出了一个
1位 然后程序就终止了,并且return了一个很大的值,明显不正常
我的解答思路和尝试过的方法
我在使用codeblocks调试时,在我输入完第一个学生的姓名后发现让我输入-13564413位学生的年龄,这是我在别的时候没有遇到过的
我想要达到的结果
我像知道我的程序错误在哪,因为编译的时候编译器并没有报错也没有警告