void insertRecord() { int i=0; char num[32]; printf("请您输入您要插入的学生的学号\n(^_^)\n"); scanf("%s",num); while(i<count&&strcmp(a[i].num ,num)!=0) { i++; } if(i==count) { printf("班级:\n"); scanf("%s",a[count].class ); printf("姓名:\n"); scanf("%s",a[count].name ); printf("学号:\n"); scanf("%s",a[count].num ); printf("手机号:\n"); scanf("%s",a[count].phone1 ); printf("手机号短号:\n"); scanf("%s",a[count].phone2 ); printf("家庭住址:\n"); scanf("%s",a[count].addr ); printf("邮编\n"); scanf("%s",a[count].code ); count++; printf("插入成功!\n"); strcpy(a[count].num,num); system("pause"); return; } else { printf("该学生已存在哦,请您修改信息:(^_^)\n"); printf("班级:\n"); scanf("%s",a[i].class ); printf("姓名:\n"); scanf("%s",a[i].name ); printf("学号:\n"); scanf("%s",a[i].num ); printf("手机号:\n"); scanf("%s",a[i].phone1 ); printf("手机号短号:\n"); scanf("%s",a[i].phone2 ); printf("家庭住址:\n"); scanf("%s",a[i].addr ); printf("邮编\n"); scanf("%s",a[i].code ); printf("修改成功!\n"); system("pause"); } }是什么意思
时间: 2023-10-16 07:08:26 浏览: 37
这是一段C语言的函数代码,实现的是向一个学生信息数组中插入一条学生记录的功能。具体来说,函数会先要求用户输入要插入的学生的学号,然后在数组中查找是否已经存在该学号对应的学生记录。如果不存在,则要求用户输入该学生的各项信息,并将该学生记录插入到数组末尾;如果已经存在该学号对应的学生记录,则要求用户修改该学生的各项信息。最后,函数会输出插入/修改成功的提示信息,并暂停程序等待用户操作。函数中使用了循环、条件判断、字符串比较、数组下标访问、字符串拷贝等基本语法。
相关问题
void Student(struct student stu[N]) { int i, n = 0; struct student *p; p=stu; char num1[] = "2021110300236"; char pass1[] = "111111"; char num[13], pass[10]; input:printf("请输入学号:"); scanf("%s",&num); printf("请输入密码:"); scanf("%s",&pass); for(i=0;i<sum;i++) { if(strcmp(num,num1)==0 && strcmp(pass,pass1)==0) { Sid+i; break; } } if(i==sum){ printf("你输入错误,请重新输入!\n"); goto input; } 优化代码
这段代码可以进行一些优化,例如:
1. 使用fgets代替scanf,可以避免输入缓冲区溢出的问题。
2. 在for循环中使用return语句代替break语句。
3. 不要使用goto语句,可以使用while循环代替。
下面是优化后的代码:
void Student(struct student stu[N]) {
int i, n = 0;
struct student *p;
p = stu;
char num1[] = "2021110300236";
char pass1[] = "111111";
char num[13], pass[10];
while (n < 4) {
printf("请输入学号:");
fgets(num, 13, stdin);
printf("请输入密码:");
fgets(pass, 10, stdin);
for (i = 0; i < sum; i++) {
if (strcmp(num, num1) == 0 && strcmp(pass, pass1) == 0) {
Sid + i;
return;
}
}
printf("你输入错误,请重新输入!\n");
n++;
}
printf("已达到最大输入次数,程序退出。\n");
}
优化这段C语言代码 while (1) { printf("插入学生的学号:\n"); int id=0; scanf("%d", &id); for (int i = 0; i <= stu_num; i++) { if (id == stu[i].studentID) { printf("学号重复,重新输入\n"); continue; } } new_stu.studentID = id; break; }
有几个可以优化的地方:
1. 在for循环中,不需要遍历到stu_num,应该是遍历到stu_num-1,因为数组下标是从0开始的。
2. 如果stu_num很大,那么每次输入一个学号都要遍历一遍数组,效率会比较低。可以提前将数组按照学号排序,然后使用二分查找来判断学号是否重复,这样可以提高效率。
下面是优化后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STU_NUM 1000
typedef struct {
int studentID;
// 其他字段...
} Student;
int cmp(const void *a, const void *b) {
return ((Student *)a)->studentID - ((Student *)b)->studentID;
}
int main() {
Student stu[MAX_STU_NUM];
int stu_num = 0;
// 排序
qsort(stu, stu_num, sizeof(Student), cmp);
while (1) {
printf("插入学生的学号:\n");
int id = 0;
scanf("%d", &id);
// 二分查找
int left = 0, right = stu_num - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (id == stu[mid].studentID) {
printf("学号重复,重新输入\n");
break;
} else if (id < stu[mid].studentID) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (left > right) {
stu[stu_num].studentID = id;
// 插入其他字段...
stu_num++;
break;
}
}
return 0;
}
```
这样优化后,每次输入一个学号只需要进行一次二分查找,效率会比较高。