在評論你說「roomdata陣列和t相同類型的雙」,這就是你走到哪裏錯了。它們不是同一類型。 roomdata[0]
是雙數組數組,而t
只是雙精度數組。
爲避免混淆,即使語言允許,也不應在類似的語句中定義不同類型的變量。 INSEAD使用兩個語句:
double roomdata[5][18][2];
double t;
另外,在C中,它是不可能分配給數組。換句話說,即使類型匹配,也不會編譯,即使類型匹配:roomdata[0] = roomdata[1];
您只能分配給單個數組元素,這意味着您必須給所有索引。因此,在你的代碼有問題,你可能希望這樣的:
roomdata[0][0][0] = t;
如果你想在C到「分配」陣列,通常使用memcpy
或創建自己的(可能是嵌套)for
循環,或包裹陣列中的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
,或至少打印它,以便您可以注意到問題(請閱讀here的返回值部分)。所以這應該是
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,那麼你會這樣做:
// initialize with 3 elements, array length is automatically set to 3
double roomdata[] = { 5, 2, 18 };
你有一個3D數組。索引[0]是一個二維數組。也許你需要[0] [0] [0] – sashkello
我試過,但也只是改變指數的值[0] [0] [0]不是一個索引[0] – user2671024
@ user2671024你根本就」這樣做。在C中,數組不可分配。 – 2013-10-02 05:08:57