如何使用用户输入在C中制作二维数组



我试图制作一个二维数组,给定行和列的数量作为用户输入。

int main(void)
{
int nx, ny;
scanf_s("%d", &nx);
scanf_s("%d", &ny);
int array[nx][ny];
return 0;
}

但VSC告诉我,括号[]中必须有常量。

有什么方法可以将"nx"one_answers"ny"转换为常量吗?

或者有没有其他方法可以在不转换数据类型的情况下声明2-D或N-D数组?

您应该使用malloc或出于教育目的声明MAX大小矩阵,并且只能在nx-ny区域内工作

#define MAX 1000
int main(void)
{
int nx, ny;
int array[MAX][MAX];
scanf_s("%d", &nx);
scanf_s("%d", &ny);
if(nx > MAX || ny > MAX) return 1; // valid range check 
// work with array
return 0;
}

这是一种方法:

int main(void)
{
int nx=0, ny=0;#intialize some random values to the variable
scanf_s("%d", &nx);
scanf_s("%d", &ny);
int array[nx][ny];
return 0;
}

C99引入";可变长度阵列";("VLA"(,但我强烈反对使用它们。你最好的选择是使用好的旧malloc((

示例:

https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/

#include <stdio.h>
#include <stdlib.h>

int main()
{
int r = 3, c = 4; //Taking number of Rows and Columns
int *ptr, count = 0, i;
ptr = (int *)malloc((r * c) * sizeof(int)); //Dynamically Allocating Memory
for (i = 0; i < r * c; i++)
{
ptr[i] = i + 1; //Giving value to the pointer and simultaneously printing it.
printf("%d ", ptr[i]);
if ((i + 1) % c == 0)
{
printf("n");
}
}
free(ptr);
}

附录:

MSVS可能支持16.8或更高版本中的VLA:https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/

最新更新