litengyue 发表于 2023-9-10 12:51:23

C语言问题

为什么会出错呀?

#include <stdio.h>

int main()
{
    int a = { = 1; = 2; = 3};
    int i, j;

    for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
      {
            printf("%d ", a);
      }
      printf("\n");
    }
   
    return 0;

isdkz 发表于 2023-9-10 12:51:30

这段代码在赋值数组时使用了C99标准的特性——指定初始化器,但是由于使用了错误的语法导致编译错误。

正确的指定初始化器语法应该是使用大括号括起来,每个元素之间用逗号分隔。修改后的代码如下:

#include <stdio.h>

int main()
{
    int a = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};
    int i, j;

    for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
      {
            printf("%d ", a[ i]);
      }
      printf("\n");
    }

    return 0;
}


这样就可以正确地输出数组的值了。

陶远航 发表于 2023-9-10 12:51:38

你的代码中出现了语法错误。在C语言中,初始化二维数组时不能使用类似于 = 1; = 2; = 3的写法。

要正确初始化二维数组,你可以使用以下两种方法:

1. 使用嵌套的花括号来初始化数组的每个元素:
int a = {
    {1, 0, 0},
    {0, 2, 0},
    {0, 0, 3}
};

2. 分行初始化每个元素:
int a = {
    = 1,
    = 2,
    = 3
};


修正后的代码如下所示:
#include <stdio.h>

int main(){
    int a = {
      {1, 0, 0},
      {0, 2, 0},
      {0, 0, 3}
    };
   
    int i, j;
    for (i = 0; i < 3; i++){
      for (j = 0; j < 3; j++){
            printf("%d ", a[ i]);
      }
      printf("\n");
    }
   
    return 0;
}


这样就能正确地初始化并打印出二维数组的值了。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

学习编程中的Ben 发表于 2023-9-10 12:55:45

本帖最后由 学习编程中的Ben 于 2023-9-10 12:57 编辑

你第5行是:
int a = { = 1; = 2; = 3};
但是定义数组时,你应该用逗号来分割鸭!而且不能再数组里面使用[][]来写
正确写法:
int a = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};
页: [1]
查看完整版本: C语言问题