void zengjia(struct student *head) { int flag, i = 1; char change = '\0'; //system("cls"); do { struct student *temp= (student*) malloc(sizeof(student)); struct student *p1; flag = 0; printf("添加的第%d个学生:\n", i); printf("学号:"); scanf("%s", temp->num); p1 = head->next; student *q1 = head; while (p1) { if (strcmp(p1->num, temp->num) == 0) { printf("学号已存在。\n"); flag++; return; } p1 = p1->next; q1 = q1->next; } if (flag == 0) { printf("\n输入正确,请继续:\n"); printf("\n姓名:"); scanf("%s", temp->name); printf("\n金额:"); scanf("%lf", &temp->money); printf(" 此学生信息已添加成功!\n"); temp->next = NULL; q1->next = temp; i++; } printf("---是否继续添加下一个学生信息---\n"); printf(" Y/N \n"); do { change = getchar(); } while (change != 'y' && change != 'Y' && change != 'n' && change != 'N'); } while (change == 'Y' || change == 'y'); }
时间: 2024-01-20 15:01:54 浏览: 113
好的,以下是您提供的代码的注释:
```
void zengjia(struct student *head) {
int flag, i = 1; // 定义标记变量flag和计数变量i
char change = '\0'; // 定义字符变量change,初值为'\0'
//system("cls"); // 清屏(注释掉了)
// 循环添加学生信息
do {
struct student *temp= (student*) malloc(sizeof(student)); // 动态分配内存
struct student *p1;
flag = 0; // 标记变量flag初值设为0
printf("添加的第%d个学生:\n", i);
printf("学号:");
scanf("%s", temp->num);
p1 = head->next; // p1指向链表第一个节点
student *q1 = head; // q1指向head
while (p1) { // 遍历链表
if (strcmp(p1->num, temp->num) == 0) { // 如果学号已存在
printf("学号已存在。\n");
flag++; // 标记变量flag加1
return; // 直接返回
}
p1 = p1->next; // 指针p1指向下一个节点
q1 = q1->next; // 指针q1指向p1的前一个节点
}
if (flag == 0) { // 如果学号不存在
printf("\n输入正确,请继续:\n");
printf("\n姓名:");
scanf("%s", temp->name);
printf("\n金额:");
scanf("%lf", &temp->money);
printf(" 此学生信息已添加成功!\n");
temp->next = NULL;
q1->next = temp; // 将新节点添加到链表尾部
i++; // 计数器加1
}
// 是否继续添加下一个学生信息
printf("---是否继续添加下一个学生信息---\n");
printf(" Y/N \n");
do {
change = getchar();
} while (change != 'y' && change != 'Y' && change != 'n' && change != 'N');
} while (change == 'Y' || change == 'y'); // 如果输入为Y或y,则继续添加
}
```
希望这些注释能帮助您理解这段代码的功能和实现方式。
阅读全文