-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.
}

我正在尝试为roomdata索引 [0] 处的数组分配一个值,但每次尝试时我都会收到一个错误,指出它是Incompatible Types in Assignment,但我都初始化为双精度数?我猜这与它是一个 3d 数组有关,但我不确定。

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

在评论中你说"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 };
于 2013-10-02T05:22:17.897 回答
0

我认为您误解了数组的工作原理。你想要一个包含三个值的数组吗?

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 回答