此段代码能让用户输入学生信息,并能检查出用户输入成绩必须小于100大于0,并提醒用户输入学生id相同错误
时间: 2024-10-14 19:15:33 浏览: 34
这段代码可以设计成一个控制台交互式的程序,使用循环来获取用户的输入,同时进行有效性检查。这里是一个简单的C语言示例:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_valid_grade(float grade) {
return grade >= 0 && grade <= 100;
}
int get_student_id() {
int id;
while (true) {
printf("请输入学生ID(0-9999): ");
scanf("%d", &id);
if (id >= 0 && id <= 9999) {
return id;
} else {
printf("ID无效,请输入0-9999之间的整数。\n");
// 清空输入缓冲区,防止后续输入干扰
scanf("%*[^\n]");
}
}
}
int main() {
Student* head = NULL;
Student* current = NULL;
while (true) {
int id = get_student_id();
float pl_score, mi_score, fi_score;
// 获取成绩输入并检查有效性
do {
printf("请输入平时成绩(0-100): ");
scanf("%f", &pl_score);
if (!is_valid_grade(pl_score)) {
printf("成绩无效,请输入0-100之间的分数。\n");
scanf("%*[^\n]"); // 清除无效输入
}
} while (!is_valid_grade(pl_score));
do {
printf("请输入期中成绩(0-100): ");
scanf("%f", &mi_score);
if (!is_valid_grade(mi_score)) {
printf("成绩无效,请输入0-100之间的分数。\n");
scanf("%*[^\n]"); // 清除无效输入
}
} while (!is_valid_grade(mi_score));
do {
printf("请输入期末成绩(0-100): ");
scanf("%f", &fi_score);
if (!is_valid_grade(fi_score)) {
printf("成绩无效,请输入0-100之间的分数。\n");
scanf("%*[^\n]"); // 清除无效输入
}
} while (!is_valid_grade(fi_score));
// 检查是否已存在同ID学生
if (current != NULL && current->id == id) {
printf("学号 %d 已经存在,请重新输入。\n", id);
continue;
}
current = (Student*)malloc(sizeof(Student));
if (!current) {
printf("Memory allocation failed.\n");
break;
}
current->id = id;
current->pl_score = pl_score;
current->mi_score = mi_score;
current->fi_score = fi_score;
current->total_score = calculate_total_score(pl_score, mi_score, fi_score);
current->next = head;
head = current;
}
// 添加其他链表操作...
return 0;
}
// 省略其他函数...
```
这段代码会不断循环请求用户输入,直到满足条件为止。如果输入的ID已经存在于链表中,程序会提示用户重新输入。如果输入的不是有效的分数,程序会提示用户并清除输入缓冲。
阅读全文