问题:temp指针为空,想问一下该如何修改,我现在创建新的结点,temp的指针仍然为NULL 没有返回值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//定义一个结构体,结构体内包含学生的学号、姓名、专业、成绩、总成绩
typedef struct{
char num[16];
char name[16];
char major[16];
float score[5];
float sum;
struct link* next;
struct link* pre;
}link;
//查找
link* find(link* temp) {
char name[16];
printf("请输入需要查找的学生姓名:");
scanf("%s", name);
if (temp == NULL)
{
printf("\n\n\n当前通讯录为空!查找失败!\n\n\n\n");
return;
}
while (temp->next != NULL && strcmp(name, temp->name) == 0) {
temp = temp->next;
}
return temp; //返回目标地址
}
//添加
void add(link *temp1,link *temp2) { // temp1 开始时为 head
if (temp1 == NULL) {
temp1 = temp2;
return;
}
if (temp1->next != NULL) {
link* temp;
temp = temp1->next;
while (temp->next != NULL) {
temp = temp->next;}
temp->next = temp2;
}
else temp1->next = temp2;
temp2->pre = temp1;
}
//删除
void delete(link* head,link* temp) { //传入需要删除的参数
if (head == temp) { //当删除目标为第一个时
head = temp->next;
free(temp);
head->pre = NULL;
return;
}
if (temp->next == NULL) {
link* temp1 = temp->pre;
free(temp);
temp1->next = NULL;
return;
}
link* temp1 = temp->pre; //保存前面的链表结点
link* temp2 = temp->next; //保存后面的链表结点
temp1->next = temp2; //前链后
temp2->pre = temp1; //后链前
free(temp);
}
//
link* creat1() {
link* temp;
temp = (link*)malloc(sizeof(link));
temp->next = NULL;
temp->pre = NULL;
printf("\n正在添加学生信息!\n");
printf("请输入学生学号:");
scanf("%s", &temp->num);
printf("请输入学生姓名:");
scanf("%s", &temp->name);
printf("请输入学生专业:");
scanf("%s", &temp->major);
temp->sum = 0;
for (int i = 1; i <= 5; i++) {
printf("请输入第%d门课程成绩:",i);
scanf("%f", &temp->score[i - 1]);
temp->sum += temp->score[i - 1];
}
printf("\n\n\n已成功添加%s学生的信息\n\n\n", temp->name);
return temp;
}
/*
link* creat2() {
int length;
link* initial;
printf("Input you need length of this linklist :");
scanf("%d", &length);
initial = creat1();
for (int i = 1; i < length; i++) {
add(initial,creat1());
printf("第%d次add成功", i);
}
return initial;
}*/
//显示当前系统内的学生
void show(link* temp1) {
link* temp = temp1;
if (temp1 == NULL)
{
printf("\n\n\n当前系统没有学生信息,请手动添加!\n\n\n\n");
return;
}
while (temp->next != NULL) {
temp = temp->next;
printf("学号=%s 名字=%s 专业=%s", temp->num, temp->name, temp->major);
for (int i = 0; i < 5; i++)
printf("第%d门成绩为%7.1f", (i + 1), temp->score[i]);
printf("总分:%3.1f", temp->sum);
printf("\n");
}
}
void menu(){
link *head = (link*)malloc(sizeof(link));
head = NULL;
link* temp = head;
int i; while (1) {
printf("1.查看全部学生成绩\n");
printf("2.添加学生信息\n");
printf("3.删除学生信息\n");
printf("4.修改学生信息\n");
printf("5.清屏\n");
printf("6.退出程序\n");
printf("请输入你的选择:");
scanf("%d", &i);
switch (i) {
case 1:
show(head);
break;
case 2:
add(head,creat1());
break;
case 3:
delete(head,find(head));
break;
case 4:
temp = find(head);
break;
case 5:
system("cls");
break;
case 6:
exit(0);
break;
default:
printf("\n\n\n输入错误,请重新输入!\n\n\n\n");
}
}
}
void main(){
menu();
}