-1
#include <stdio.h>

int main(void)
{

    double roomdata[5][18][2],t;

    scanf(" %lf",t);
    roomdata[0] = t; // How Come this does not work?
                     // I get a error "Incompatible Types in Assignment"
                     // but both roomdata array and t are same type of double.
}

インデックス [0]の配列roomdataに値を代入しようとしていますが、試行するたびに代入の互換性のない型であるというエラーが表示されますが、両方とも double として初期化されていますか? 3次元配列であることと関係があると思いますが、よくわかりません。

4

4 に答える 4

4

そのはず

scanf(" %lf", &t);
roomdata[0][0][0] = t;
于 2013-10-02T05:07:08.930 に答える
2

scanf でアドレスを渡す必要があります

scanf(" %lf",t);  ==> scanf(" %lf",&t);
             ^                     ^ 

そして、適切なインデックスを使用する必要があります

roomdata[i][j][k] = t; 
于 2013-10-02T05:10:09.273 に答える
0

配列の仕組みを誤解していると思います。代わりに、3 つの値を持つ単一の配列が必要ですか?

double roomdata[3], t;
roomdata[0] = 5;
roomdata[1] = 18;
roomdata[2] = 2;
scanf(" %1f", &t);
roomdata[0] = t;
于 2013-10-02T05:12:33.187 に答える
0

コメントでは、「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に割り当てたい場合、これは方法です:troomdata[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 };
于 2013-10-02T05:22:17.897 に答える