提问人:Matheus Caetano Rocha 提问时间:9/29/2023 更新时间:9/29/2023 访问量:47
如何正确处理 C 语言中 char 类型的控制台操作?
How do I correctly handle console operations with char type in C?
问:
我正在做一个逻辑练习(乞丐的东西),其中向用户提供了输入“A”作为其学校成绩的算术平均值和“W”作为加权平均值的选项。然后,用户继续提供三个等级,程序调用calculate_grades功能,并根据用户选择的平均值类型在终端中显示音符的平均值 - 非常基本的东西,我知道!代码如下:
#include <stdio.h>
#include <stdbool.h>
float calculate_grades(char letter, float grade1, float grade2, float grade3) {
float average;
if (letter == 'A' || letter == 'a')
average = (grade1 + grade2 + grade3) / 3;
else
average = (grade1 * 5 + grade2 * 3 + grade3 * 2) / (5 + 3 + 2);
return average;
}
int main() {
int n;
float grade1, grade2, grade3;
char letter;
do {
printf("Enter the number of students:\n");
scanf("%d", &n);
if (n < 0)
printf("Invalid input! The number of students should be greater than or equal to zero.\n");
} while (n < 0);
for (int i = 0; i < n; i++) {
do {
printf("Enter 'A' for arithmetic mean or 'W' for weighted mean:\n");
scanf(" %c", &letter);
if ((letter != 'A' && letter != 'a') && (letter != 'W' && letter != 'w'))
printf("Invalid input! The options are 'A' for arithmetic mean and 'W' for weighted mean.\n");
} while ((letter != 'A' && letter != 'a') && (letter != 'W' && letter != 'w'));
do {
printf("Enter the first grade:\n");
scanf("%f", &grade1);
if (grade1 < 0)
printf("Invalid input! The grade should be greater than or equal to zero.\n");
} while (grade1 < 0);
do {
printf("Enter the second grade:\n");
scanf("%f", &grade2);
if (grade2 < 0)
printf("Invalid input! The grade should be greater than or equal to zero.\n");
} while (grade2 < 0);
do {
printf("Enter the third grade:\n");
scanf("%f", &grade3);
if (grade3 < 0)
printf("Invalid input! The grade should be greater than or equal to zero.\n");
} while (grade3 < 0);
printf("Student's average: %.2f pts\n", calculate_grades(letter, grade1, grade2, grade3));
}
return 0;
}
然而,由于某种原因,当程序到达它要求用户计算平均值类型的部分时,终端会显示多行“无效输入”——不仅当用户输入无效输入(如“blablabla”或“lorem ipsum”)时,甚至当用户输入有效输入(如“a”或“W”)时!我以前从未以这种方式在 C 中处理过字符类型,所以我不知道问题出在哪里,GPT 提供的所有解决方案都非常复杂——我敢肯定这是没有必要的,否则我的大学老师不会一开始就给我们这个练习。我在这里没有看到的简单而明显的解决方案是什么?
答: 暂无答案
下一个:字符数组应该如何用作字符串?
评论
fgets()
scanf
0
if( n <= 0 )
while()
letter != 'X' && letter != 'x'
tolower(letter) != 'x'
xxxxx
scanf()
QWERTY
scanf("%f", &grade2);
scanf()
QWERTY
grade2
grade2
scanf()
grade3
grade2
scanf()