質問: 0) { printf("人数は何人ですか?\n"); scanf("%d", &member); printf("何教科ありますか?\n"); scanf("%d", &subject); printf("人数%d人\t教科は%d種目\tでいいですか?\n", member, subject); printf("はい=1\tいいえ=0\n"); scanf("%d", &OK); } ``` と人数と科目数をscanf関数で値を設定し、 ``` SEITO Std[member]; ``` と初期化したいのですが、上記の「SEITO Std[member];」 のmemberの部分がエラーの赤波線が発生し、「式には定数値が必要です」っと 出てしまいます。 c言語ポインタ完全制覇という参考書のP.84に同じ様にscanf関数で値を設定し、その変数を配列の個数に設定(可変長配列の宣言)しています。 なぜエラー表示が出てしまうのか理解に苦しんでいます。 その違いと私が書いたコードはどの様に書き直したらいいのか教えて頂きたいです! 宜しくお願いします。
回答: C言語は動的配列をサポートしていません。 C++ならできます。 C言語で目的を達成したい場合は、malloc等で動的にメモリを確保する必要があります。 ``` // ポインタで宣言 SEITO *pStd // 動的メモリ確保 pStd = (SEITO*)malloc(sizeof(SEITO) * member); // pStd[0].kokugo = 0; // メモリの解放を忘れずに free(pStd); ```