0

ヘルプ、以下のコードで問題を特定できないようです。

これが私がやろうとしていることです:マークのリストを入力します。入力は0で終わります(0自体は誰かのマークではありません)。1)85以上のスコアを付けた生徒の数を出力します。2)60〜84; 3)厳密に60未満。

これが私のコードです:

#include stdio.h

int main() {
    int mark;
    int morethan85 = 0, between60and84 = 0, lessthan60 = 0;

    for (true) {
        scanf("%d", &mark);
        if (mark != 0) {
            if (mark >= 85)
                morethan85 = morethan85 + 1;
            else if (mark < 85 && mark >= 60)
                between60and84 = between60and84 + 1;
            else
                lessthan60 = lessthan60 + 1;
        } else
            break;
    }

    printf(">=85:%d, morethan85");
    printf("60-84:%d, between60and84");
    printf("<60:%d, lessthan60");

}
4

2 に答える 2

3
printf(">=85:%d, morethan85");
                           ^

プレーンな文字列を印刷しています。代わりにこれを試してください:

printf(">=85:%d", morethan85);
               ^

また、厳密に言えば、フォーマット文字列で必要とされるよりも少ない引数を渡すことは未定義の動作です。

于 2012-08-07T19:55:58.637 に答える
0

おっと。ここにコメントするものがたくさんあります。

  1. まず、「true」は無効ですC。TRUEという名前のマクロまたは定数を定義して「1」に設定するか、単に1を使用することができます。

  2. 何かが壊れるまでループしている場合は、for()ではなくwhile()を使用してください。

  3. 最後に、コードが機能しない理由は、printf()関数の変数名の後に引用符記号を追加したためです。

コードの動作バージョンは次のとおりです。

#include <stdio.h>

int main() {
    int mark;
    int morethan85 = 0;
    int between60and84 = 0;
    int lessthan60 = 0;

    while (1) {
        scanf("%d", &mark);
        if (mark != 0) {
            if (mark >= 85)
                morethan85 ++;
            else if (mark < 85 && mark >= 60)
                between60and84 ++;
            else
                lessthan60 ++;
        } else
            break;
    }

    printf(">=85:%d\n", morethan85);
    printf("60-84:%d\n", between60and84);
    printf("<60:%d\n", lessthan60);

}
于 2012-08-07T20:02:25.230 に答える