在评论中你说"roomdata array and t are same type of double",这就是你出错的地方。它们不是同一类型。roomdata[0]
是双精度数组的数组,而t
只是双精度。
为避免混淆,您不应像这样在同一语句中定义不同类型的变量,即使语言允许这样做。Insead 使用两种说法:
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 维双精度数组,那么您会这样做:
// initialize with 3 elements, array length is automatically set to 3
double roomdata[] = { 5, 2, 18 };