2

私はCに非常に慣れておらず、宿題の問題に取り組んでいます。ユーザーから 10 個の数字を受け取り、平均値、最大値、最小値を出力するプログラムを作成する必要があります。私は正しいコードのように見えますが、出力はかなりずれています。これが私がこれまでに持っているものです

#include <stdio.h>

int main() {
    int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;

    printf("Enter 10 grades sperated by commas, then press enter: ");
    scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",num1,num2,num3,num4,num5,num6,num7,num8,&num9,&num10);getchar();

    int numbers[] = {num1,num2,num3,num4,num5,num6,num7,num8,num9,num10};

    int avg = (num1+num2+num3+num4+num5+num6+num7+num8+num9+num10)/10;

    printf("The average is: %d",avg);

    int high  = num1;
    for(int i=0; i<10; i++) {
        if (numbers[i] > high) {
            high = numbers[i];
        }
    }
    printf("The highest grade is: %d",high);

    int low = num1;
    for(int i=0; i<10; i++) {
        if (numbers[i] < low) {
            low = numbers[i];
        }
    }
    printf("The lowest number is: %d",low);

    return 0;
}

誰かが私が間違っていることについて洞察を与えることができれば、本当に感謝しています。ありがとうございました!

4

3 に答える 3

3

への呼び出しでは、各のアドレスscanfを取得していません。とのアドレスのみを取得し、それらすべてを に渡します。 numXnum9num10scanf

あなたが望むものは:

scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&num1,&num2,&num3,&num4,&num5,&num6,&num7,&num8,&num9,&num10);


C では、&演算子は変数 (ポインターとも呼ばれます) のアドレスを提供します。この関数は、変数へのポインターscanfを渡すことを想定しているため、実際の変数を変更できます。

また、コードを少し扱いに​​くくするために、これらのnumX変数をすべて取り除き、入力配列を直接読み取ることを検討することもできます。

于 2013-02-14T04:26:17.153 に答える
0

このマニュアルを読んで、次のように答えてください。

  1. scanf は、"%d" 書式指定子に対応すると予想される値の型は何ですか?
  2. int x;x の型は何ですか? &x はどうですか?
  3. 10 個の値を求めるプロンプトが表示され、9 個の値のみを入力し、その後に「Ooops!」と入力すると、scanf は何を返しますか?
  4. そのシナリオに続いて、getchar() は何を返すと思いますか? scanf("%d", &num10);が値を正常に読み取るために getchar() が返す必要があるのはどのタイプの文字ですか?
于 2013-02-14T04:33:15.570 に答える
0

まず、関心の分離に焦点を当てます。入力を読み取る関数、最小値を返す別の関数、最大値を返す別の関数、その後に平均を返す関数を作成します。また、変数の巨大なプールを宣言するのではなく、配列を使用して保存しようとしているすべてのデータを収集することを検討し、そのすべての入力から自分を救います。それでは、この配列関数のプロトタイプを作成しましょう。

プロトタイプ:

int* get_numbers(int* size); // should return a pointer to that array

実装:

int* get_numbers(int* size)
{
    int* numbers = NULL;

    // collect data...

    return numbers;
}
于 2013-05-09T04:18:40.180 に答える