0

プロンプトが表示された後にユーザーに配列のサイズを入力させることで、配列のサイズを決定しようとしています (テストごとにいくつの成績があるかわからないため)...

行が気に入らないようですscanf ("%c",&grades[i]);

関数全体は次のとおりです。

#include <stdio.h>

 int main (void)
{
int numGrades;
char grades;
char i;
int x;


printf ("Enter The Amount Of Numbers In Your Array: ");
scanf("%i", &numGrades);/*Stores Amount Of Grades In The Array*/

for (x = 0; x < numGrades; ++x)
  {
  printf ("\nEnter the grade: ");
  scanf ("%c",&grades[i]);
  }

return 0; 
}

任意のサイズの配列を受け入れることができるように、配列サイズをパラメーターとして渡すにはどうすればよいですか? (すべての成績を取得して文字で組み合わせる機能を追加します)

4

2 に答える 2

3

次の 2 つの選択肢があります。

  1. コンパイラが C99 可変長配列をサポートしている場合、サイズを取得した後で配列を宣言できます。

    scanf("%i", &numGrades);
    char grades[numGrades];
    
  2. そうでない場合は、配列をヒープに動的に割り当てる必要があります。

    scanf("%i", &numGrades);
    char *grades = malloc(numGrades * (sizeof *grades));
    
于 2013-03-07T06:34:43.990 に答える
2

配列ではなく、grades単一として宣言しました。char次のように、読み込んだ後に宣言を移動しnumGradesて VLA にします。

char grades[numGrades];

またはダイナミック アロケーションを使用します。

char *grades = malloc(numGrades);

後者を選択した場合は、それを忘れないfree()でください。

于 2013-03-07T06:33:05.737 に答える