C语言菜鸟,学生成绩管理系统插入部分总是不能达到目的,急求高手帮忙看一下!分不太多,但是真的需要帮忙

2024-12-14 23:59:26
推荐回答(3个)
回答1:

函数原型没有声明,其他的没看,写的太复杂,其实插入理解了过程就很简单,下面是我写的一个简化了的:
#include
#include
#include

typedef struct node
{
char name[10];
struct node *next;
}node;

void insert(node *s)
{
int place = 0, i = 0;
struct node *p = NULL, *q = NULL;

q = s;
p = (node*)malloc(sizeof(node)); //给插入的结点分配内存

printf("input the node's name: ");
scanf("%s", p->name);
printf("input the place(after this): "); //插入位置(在输入位置之后,输入位置大于0)
scanf("%d", &place);

for (i = 1; i < place; i++)
q = q->next;
p->next = q->next;
q->next = p; //完成插入结点
}

void display(node *s)
{
node *p = s;

while (p->next != NULL)
{
p = p->next;
printf("%s\n", p->name);
}
printf("\n");
}

void main()
{
node *s = NULL;
int i = 0, choose = 0;

s = (node*)malloc(sizeof(node)); //生成头结点,不存储数据
s->next = NULL;

for ( ; ; )
{
printf("\n* * * * * *"
"\n* 1 insert"
"\n* 2 display"
"\n* * * * * *\n");
printf("input your select: ");

scanf("%d", &choose);
switch (choose)
{
case 1:
insert(s);
break;
case 2:
display(s);
break;
default:
break;
}
}
}
你的编码风格很差,觉得我的还行就看看吧。

回答2:

貌似没什么问题啊 你的数据库可能有问题吧

回答3:

while(p)
{
if(p->data.numdata.num)
if(p->next==NULL){p->next=q;q->next=NULL;break;}
else
p=p->next;
else l->next=q;q->next=p;
}
shoudsave=1;
//没看明白你的循环链表什么意思,没有必要循环链表把,这样写要提前保证链表中有至少一个记录。从小到大排列