优化这段代码并添加注释,要求保存的内容仅为查找到的内容:void find(struct student *list, int amount) { int i = 0; int flag = 1; char temp[10]; dispinfo(); // 显示菜单信息 int flag2; do { flag2 = 1; printf(" 请输入学号:"); scanf("%s", temp); // 获取用户输入的学号 // 查找学生信息 for (i = 0; i < amount; i++) { flag = strcmp(temp, list[i].code); // 比较用户输入的学号和学生信息中的学号 if (flag == 0) { // 如果学号匹配成功 flag2 = 0; printf("\t\t 学号 总评 等级 \n"); printf("\t\t%10s %6.1f%6c \n", list[i].code, list[i].score, list[i].grade); // 输出匹配成功的学生信息 char choice[2]; printf("是否保存?(y/n):"); scanf("%s", choice); if (strcmp(choice, "y") == 0) { // 保存学生信息到文件中 FILE *fp; fp = fopen("C:\Users\dell\Desktop\软件设计-源文件\A3\find_out.txt", "w"); // 打开文件 fprintf(fp, "\t\t 学号 总评 等级 \n"); for (i = 0; i < amount; i++) { fprintf(fp, "\t\t %10s %6.1f %6c \n", list[i].code, list[i].score, list[i].grade); // 将学生信息写入文件中 } printf("\n\n ****** 输出成功!请查看!摁任意键继续 ****** \n"); fclose(fp); // 关闭文件 getch(); // 等待用户按键 } return; } } if (flag2 == 1) { printf(" 您所输入的学号不存在,请重新输入!\n"); // 如果没有匹配成功,提示用户重新输入 } } while (flag2); }
时间: 2024-03-28 15:38:28 浏览: 21
// 优化后代码:
void find(struct student *list, int amount) {
int flag = 1;
char temp[10];
dispinfo(); // 显示菜单信息
int flag2;
do {
flag2 = 1;
printf("请输入学号:");
scanf("%s", temp); // 获取用户输入的学号
// 查找学生信息
for (int i = 0; i < amount; i++) {
flag = strcmp(temp, list[i].code); // 比较用户输入的学号和学生信息中的学号
if (flag == 0) { // 如果学号匹配成功
flag2 = 0;
printf("\t\t 学号 总评 等级 \n");
printf("\t\t%10s %6.1f%6c \n", list[i].code, list[i].score, list[i].grade); // 输出匹配成功的学生信息
// 保存学生信息到文件中
char choice;
printf("是否保存?(y/n):");
scanf(" %c", &choice);
if (choice == 'y') {
FILE *fp = fopen("C:\\Users\\dell\\Desktop\\软件设计-源文件\\A3\\find_out.txt", "w"); // 打开文件
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fprintf(fp, "\t\t 学号 总评 等级 \n");
fprintf(fp, "\t\t %10s %6.1f %6c \n", list[i].code, list[i].score, list[i].grade); // 将匹配成功的学生信息写入文件中
printf("\n\n ****** 输出成功!请查看!按任意键继续 ****** \n");
fclose(fp); // 关闭文件
getch(); // 等待用户按键
}
return;
}
}
if (flag2 == 1) {
printf("您所输入的学号不存在,请重新输入!\n"); // 如果没有匹配成功,提示用户重新输入
}
} while (flag2);
}
// 优化说明:
// 1.将 i 的初始化放到 for 循环中,避免变量重复定义
// 2.将 temp 数组的大小设为 10,与输入的学号长度一致
// 3.将 choice 数组的大小设为 1,因为只需存储一个字符
// 4.使用字符类型的 choice 变量代替字符串类型的 choice 数组,避免不必要的判断
// 5.添加了文件打开失败的处理
// 6.将文件路径中的反斜杠转义,避免编译错误
// 7.使用 scanf(" %c", &choice) 代替 scanf("%s", choice),避免读取换行符
// 8.添加了注释,提高代码可读性