私は初心者のC練習に取り組んでいます。スコアが挿入されると正しいマークが出力されます。 しかし、私は実際にエクササイズの最後の部分で成功することはできません(プラスまたはマイナスを加えてください)。理由を理解できません。 line[1]
が期待どおりに動作しない理由を本当に理解したいと思います。初心者Cの練習[sscanf - fgets - else 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'は終端文字で、Cは文字列の終わりをどのように知るか)。一重引用符 - '' 3'' - キャラクタの値をメモリに入れます - 51. – Attie
一般的な提案:入力/出力とは別のロジックです。どうやってするか?入力として整数を持つtranslateScoreToGradeなどの新しい関数を作成し、構造体Gradeを出力(charグレード、char修飾子)として作成します。あなたの教授があなたにもっと高いスコアを与えるでしょう:) –
また、これらのifsをswitch - >(100-score)/ 10、case 0 - > case 1-> B ... default-> F –