【发布时间】:2017-08-06 02:08:15
【问题描述】:
我正在处理一个初学者 C 练习,我认为我已经完成了第一部分非常正确(一点也不优雅);如果插入分数,则输出正确的标记。
但我真的无法在练习的最后一部分(加号或减号)中成功,我不知道为什么。
我真的很想了解为什么line[1] 不能按预期工作。
练习的文本: 一位教授使用下表生成字母等级:
0–60 -> F
61–70 -> D
71–80 -> C
81–90 -> B
91–100 -> A
给定一个数字等级,打印字母。 现在,修改之前的程序,根据分数的最后一位数字在字母等级后打印 + 或 -。 最后一位修饰符
1–3 -> "–"
4–7 -> <blank>
8–0 -> "+"
例如,81=B-、94=A 和 68=D+。注意:F 只是 F。没有 F+ 或 F-。
我做了什么:
#include <stdio.h>
char line[20]; //prepare the input from keyboard
int score;
char plusminus;
int main() {
printf("insert your score: "); // ask for the score
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &score);
// check for conditions
if (score <= 60) {
printf("F");
}
if (score <= 70 && score >60) {
printf("D");
}
if (score <= 80 && score >70) {
printf("C");
}
if (score <= 90 && score >80) {
printf("B");
}
if (score <= 100 && score >90) {
printf("A");
}
// plus and minus to the mark, but didn't succed :(
plusminus = line[1];
if (plusminus < "3") {
printf("-");
}
if (plusminus > "8") {
printf("+");
}
}
感谢大家!
【问题讨论】:
-
双引号 -
"3"- 将创建一个包含3\0的字符串(\0是一个空终止符 - C 如何知道字符串的结尾在哪里)。单引号 -'3'- 会将字符的值放入内存中 - 51。 -
这里只是一个一般性建议:将逻辑与输入/输出分开。怎么做?创建新的功能,例如“translateScoreToGrade”,它有整数作为输入,结构等级作为输出(字符等级,字符修饰符)。它更优雅,测试更干净,你的教授会给你更高的分数:)
-
您也可以将这些 if 转换为 switch -> (100 - score)/10, case 0 ->A case 1->B ... default->F
-
if (plusminus < "3") {不会生成编译器警告吗?如果没有,请启用所有编译器警告——这样可以节省时间。
标签: c if-statement char fgets scanf