【问题标题】:initializing a matrix, expected expression error in C初始化矩阵,C 中的预期表达式错误
【发布时间】:2014-11-11 23:58:36
【问题描述】:

所以我尝试查找一些看起来很有帮助但最终没有用的东西。

我应该在单独的函数中将 6x8 矩阵初始化为二维数组。我有三个文件,一个主函数文件,一个函数文件和一个头文件。

这里是main中的相关代码

     int plate[MAX_ROWS][MAX_COLS];

double A = 0, B = 0, T1 =0, T2 = 0, C = 0;

printf("\n");
printf("Welcome to the Heat Plate Simulation\n\n");
printf("Enter: Heat-A, Heat-B, Plate-1, Plate-2, Stab-Crit\n\n");
scanf("%lf%lf%lf%lf%lf", &A,&B,&T1,&T2,&C);

那我试试

    initialize_plate(plate,T1, T2);

    void initialize_plate(int plate[][MAX_COLS],double T1, double T2)
    {
 plate[MAX_ROWS][MAX_COLS] = {
    { T1, T1, T1, T2, T2, T2},
    { T1, T1, T1, T2, T2, T2},
    { T1, T1, T1, T2, T2, T2},
    { T2, T2, T2, T1, T1, T1},
    { T2, T2, T2, T1, T1, T1},
    { T2, T2, T2, T1, T1, T1} 
    };
return;
    }

我收到的错误是 7P_functions.c:14:32: error: expected expression before ‘{’ token *板[MAX_ROWS][MAX_COLS] = {

鉴于我对此错误的研究,我唯一的猜测是它与已经初始化的数组有关,但我不确定如何纠正这个问题,而如果我在函数中初始化数组而不是在main 不就变成局部变量了吗?

任何帮助将不胜感激。

【问题讨论】:

  • 赋值不等同于初始化。您必须遍历每个索引来分配值。
  • 感谢您的意见
  • plate 元素的类型是 int,但 T1T2 的类型是 double
  • 我把它们都改成了双打,谢谢,在尝试解决这个问题时也看到了
  • 最好在这一行的输入数字之间至少留一个空格:scanf("%lf%lf%lf%lf%lf", &A,&B,&T1 ,&T2,&C);此外,还需要检查对 scanf() 调用的返回值,以确保格式字符串的所有转换都成功。在这种情况下,该值应为 5

标签: c arrays initialization


【解决方案1】:

使用临时数组中的memcpy 设置值。

void initialize_plate(int plate[][MAX_COLS],double T1, double T2){
    memcpy(plate, (int [][MAX_COLS]){
        { T1, T1, T1, T2, T2, T2},
        { T1, T1, T1, T2, T2, T2},
        { T1, T1, T1, T2, T2, T2},
        { T2, T2, T2, T1, T1, T1},
        { T2, T2, T2, T1, T1, T1},
        { T2, T2, T2, T1, T1, T1} },
        6*sizeof(int [MAX_COLS]));

    return;
}

【讨论】:

  • 也许我复制错了,但我得到:错误:ISO C90 禁止复合文字 [-Wpedantic] memcpy(plate, (int [][MAX_COLS]){
  • @puzzlekid 你可以这样:int temp[MAX_ROWS][MAX_COLS] = {...}; memcpy(plate, temp, sizeof(temp)); 或使用选项-std=c99 或其他。
  • 如果我按照你的方式做,或者我尝试过的其他方式,不确定它是否有效,但无论哪种方式,我都会收到 7P_functions.c:18:3: error: initializer 的错误元素在加载时不可计算
  • @puzzlekid 啊,是的。不用 C99 编译?
  • 看这就是我无知的表现,但我不知道。我们使用 PuTTy,我输入 gcc 来编译我的函数,但具体我不知道也不知道如何找到,但会调查它
【解决方案2】:

这个盘子[MAX_ROWS][MAX_COLS] = {...}; 尝试通过初始化在内存中保留一个位置。 您不能使用此方法修改数组的值。

【讨论】:

  • 感谢您的输入,结合上面的评论,我认为必须有所作为,并将更改代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多