コメントでは、「roomdata 配列と t は同じ型の double です」と言っていますが、ここで間違っています。それらは同じタイプではありません。roomdata[0]
は double の配列の配列ですが、t
は単なる double です。
混乱を避けるために、言語で許可されていても、そのような同じステートメントで異なるタイプの変数を定義しないでください。代わりに 2 つのステートメントを使用します。
double roomdata[5][18][2];
double t;
さらに、C では配列に代入することはできません。つまり、型が一致していても、これもコンパイルされません。roomdata[0] = roomdata[1];
単一の配列要素にのみ割り当てることができます。つまり、すべてのインデックスを指定する必要があります。したがって、質問コードでは、これが必要になる場合があります。
roomdata[0][0][0] = t;
C で配列を「割り当て」たい場合は、通常memcpy
、独自の (おそらくネストされた)for
ループを使用または作成するか、配列を a でラップしますstruct
(C では構造体を割り当てることができるため)。例、ループについて: 「レイヤー」for
に割り当てたい場合、これは方法です:t
roomdata[0][][]
int j, k;
for (j=0; j<18; ++j) {
for(k=0; k<2; ++k) {
roomdata[0][j][k] = t;
}
}
また、それについて尋ねないのは間違っていますが、読み取っscanf(" %lf",t);
た値を格納する場所へのポインターを渡す必要があります。scanf
さらに、 の戻り値を常にチェックするscanf
か、少なくとも印刷して問題に気付くようにする必要があります (ここの戻り値のセクションを読んでください)。だからそうあるべき
double t = 0.0; // initialize with a know value in case scanf fails
int scannedCount = scanf(" %lf", &t);
printf("(scanf returned %d, value of t=%f)\n", scannedCount, t);
そして、roomdata
念のために、部屋の内容の 3 次元グリッドを実際に意図しているように聞こえますが、初期値が 5、2、18 の 1 次元 double 配列を実際に使用するつもりなら、次のようにします。 :
// initialize with 3 elements, array length is automatically set to 3
double roomdata[] = { 5, 2, 18 };