我正在處理一個初學C的練習,我已經完成了第一部分,我覺得非常正確(根本不算優雅);如果插入分數,則輸出正確的標記。 但我真的不能在練習的最後部分成功(加上或減去),我不明白爲什麼。 我真的很想明白爲什麼line[1]
不能按預期工作。初學C練習[sscanf - fgets - if else]
的練習題的文本: 一位教授生成使用下表字母等級:
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'是一個nul終止符 - C如何知道字符串的末尾在哪裏)。單引號 - 「3」 - 將字符的值存儲在內存中 - 51. – Attie
這裏只是一個普遍的建議:將邏輯與輸入/輸出分開。怎麼做?創建新的功能,例如「translateScoreToGrade」,它具有整數作爲輸入,並將結構等級作爲輸出(char等級,字符修飾符)。它更加優雅,並且測試更加清潔,並且您的教授會給您更高的分數:) –
您也可以將這些ifs轉換爲切換 - >(100分)/ 10,情況0 - >案例1-> B ... default-> F –