void add_student(struct student_grade *a) { int t,m=0; printf("请输入学生的id:\n"); scanf("%d",&t); for(int i=0;i<a->n;i++){ if(a->st[i].id==t) m=1; } if(m==0){ a->st[a->n].id=t; a->n++; } else{ printf("添加失败!\n"); } if(m==0){ printf("请输入学生的姓名:\n"); scanf("%s",a->st[a->n].name); printf("请输入学生各科的成绩:\n"); for(int i=0;i<10;i++) scanf("%d",&a->st[a->n].grade[i]); } }学好0001输入有bug
时间: 2024-01-02 11:04:31 浏览: 29
这段代码存在一个问题,即在输入学生ID之后没有对输入的ID进行查重。如果输入的ID已经存在于数组中,则会出现添加失败的情况。
为了解决这个问题,可以在输入ID之后遍历已有的学生信息,如果输入的ID已经存在,则设置一个标志位m为1,否则将新的ID添加到数组中。
以下是修改后的代码:
```c
void add_student(struct student_grade *a) {
int t, m = 0;
printf("请输入学生的id:\n");
scanf("%d", &t);
for (int i = 0; i < a->n; i++) {
if (a->st[i].id == t)
m = 1;
}
if (m == 0) {
a->st[a->n].id = t;
a->n++;
printf("请输入学生的姓名:\n");
scanf("%s", a->st[a->n - 1].name);
printf("请输入学生各科的成绩:\n");
for (int i = 0; i < 10; i++)
scanf("%d", &a->st[a->n - 1].grade[i]);
}
else {
printf("添加失败!\n");
}
}
```
这样,就可以正确处理输入学号为0001的情况了。
相关问题
void add_student(struct student_grade *a) { int t, m = 0; printf("请输入学生的id:\n"); scanf("%d", &t); for (int i = 0; i < a->n; i++) { if (a->st[i].id == t) m = 1; } if (m == 0) { a->st[a->n].id = t; a->n++; printf("请输入学生的姓名:\n"); scanf("%s", a->st[a->n - 1].name); printf("请输入学生各科的成绩:\n"); for (int i = 0; i < 10; i++) scanf("%d", &a->st[a->n - 1].grade[i]); save_data(*a); } else { printf("添加失败!\n"); } }输入时多了一个特殊字符
如果你输入的时候多了一个特殊字符,比如回车符,可以使用以下方法清空缓存区:
```
while(getchar() != '\n');
```
在输入之前加上这一行代码,可以清空输入缓存区,避免多余的字符对后面的输入造成干扰。例如:
```
printf("请输入学生的姓名:\n");
while(getchar() != '\n');
scanf("%s", a->st[a->n - 1].name);
```
这样即可保证输入正确。
用c语言给这段代码加入删除学生信息和修改学生信息的功能,要求这段代码可在dev c++上可以运行。并对这段代码的功能进行介绍#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_STUDENTS 20#define NAME_LENGTH 20typedef struct { char name[NAME_LENGTH]; int age; float grade;} Student;void add_student(Student *students, int *num_students);void search_student(Student *students, int num_students);void display_students(Student *students, int num_students);int main() { Student students[MAX_STUDENTS]; int num_students = 0; int choice; do { printf("\n1. Add student\n2. Search student\n3. Display all students\n4. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_student(students, &num_students); break; case 2: search_student(students, num_students); break; case 3: display_students(students, num_students); break; case 4: printf("Exiting program...\n"); break; default: printf("Invalid choice.\n"); } } while (choice != 4); return 0;}void add_student(Student *students, int *num_students) { if (*num_students >= MAX_STUDENTS) { printf("Maximum number of students reached.\n"); return; } Student *new_student = &students[*num_students]; printf("Enter name: "); scanf("%s", new_student->name); printf("Enter age: "); scanf("%d", &new_student->age); printf("Enter grade: "); scanf("%f", &new_student->grade); *num_students += 1; printf("Student added.\n");}void search_student(Student *students, int num_students) { char name[NAME_LENGTH]; printf("Enter name to search: "); scanf("%s", name); for (int i = 0; i < num_students; i++) { if (strcmp(students[i].name, name) == 0) { printf("Name: %s\nAge: %d\nGrade: %0.2f\n", students[i].name, students[i].age, students[i].grade); return; } } printf("Student not found.\n");}void display_students(Student *students, int num_students) { for (int i = 0; i < num_students; i++) { printf("Name: %s\nAge: %d\nGrade: %0.2f\n", students[i].name, students[i].age, students[i].grade); printf("---------------------\n"); }}
好的,我会为您解答这个问题。首先,我需要说明的是,为了加入删除和修改学生信息的功能,我们需要对原有的代码进行一定的修改和增加。下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 20
#define NAME_LENGTH 20
typedef struct {
char name[NAME_LENGTH];
int age;
float grade;
} Student;
void add_student(Student *students, int *num_students);
void search_student(Student *students, int num_students);
void display_students(Student *students, int num_students);
void delete_student(Student *students, int *num_students);
void modify_student(Student *students, int num_students);
int main() {
Student students[MAX_STUDENTS];
int num_students = 0;
int choice;
do {
printf("\n1. Add student\n2. Search student\n3. Display all students\n4. Delete student\n5. Modify student\n6. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(students, &num_students);
break;
case 2:
search_student(students, num_students);
break;
case 3:
display_students(students, num_students);
break;
case 4:
delete_student(students, &num_students);
break;
case 5:
modify_student(students, num_students);
break;
case 6:
printf("Exiting program...\n");
break;
default:
printf("Invalid choice.\n");
}
} while (choice != 6);
return 0;
}
void add_student(Student *students, int *num_students) {
if (*num_students >= MAX_STUDENTS) {
printf("Maximum number of students reached.\n");
return;
}
Student *new_student = &students[*num_students];
printf("Enter name: ");
scanf("%s", new_student->name);
printf("Enter age: ");
scanf("%d", &new_student->age);
printf("Enter grade: ");
scanf("%f", &new_student->grade);
*num_students += 1;
printf("Student added.\n");
}
void search_student(Student *students, int num_students) {
char name[NAME_LENGTH];
printf("Enter name to search: ");
scanf("%s", name);
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("Name: %s\nAge: %d\nGrade: %0.2f\n", students[i].name, students[i].age, students[i].grade);
return;
}
}
printf("Student not found.\n");
}
void display_students(Student *students, int num_students) {
for (int i = 0; i < num_students; i++) {
printf("Name: %s\nAge: %d\nGrade: %0.2f\n", students[i].name, students[i].age, students[i].grade);
printf("---------------------\n");
}
}
void delete_student(Student *students, int *num_students) {
char name[NAME_LENGTH];
printf("Enter name to delete: ");
scanf("%s", name);
for (int i = 0; i < *num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
for (int j = i; j < *num_students - 1; j++) {
students[j] = students[j + 1];
}
*num_students -= 1;
printf("Student %s deleted.\n", name);
return;
}
}
printf("Student not found.\n");
}
void modify_student(Student *students, int num_students) {
char name[NAME_LENGTH];
printf("Enter name to modify: ");
scanf("%s", name);
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("Enter new name: ");
scanf("%s", students[i].name);
printf("Enter new age: ");
scanf("%d", &students[i].age);
printf("Enter new grade: ");
scanf("%f", &students[i].grade);
printf("Student %s modified.\n", name);
return;
}
}
printf("Student not found.\n");
}
```
这段代码的修改主要是在 `main()` 函数中增加了两个选项:删除学生信息和修改学生信息。同时,我们还需要添加两个新的函数 `delete_student()` 和 `modify_student()`。
其中, `delete_student()` 函数用于删除学生信息。我们需要输入要删除的学生姓名,然后遍历学生数组,找到要删除的学生后将其从数组中删除,最后将学生数量减一。
`modify_student()` 函数用于修改学生信息。同样地,我们需要输入要修改的学生姓名,然后遍历学生数组,找到要修改的学生后分别输入新的姓名、年龄和成绩,最后打印修改成功的信息。
我希望这个修改后的代码可以满足您的需求,如果您有任何问题或疑惑,请随时向我提问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)