扫描二维数组大小C

扫描二维数组大小C,c,C,我已尝试通过以下方式设置自定义数组大小: #include <stdio.h> #include <stdlib.h> int main() { int x; int y; printf("Array size:"); scanf("%d %d", &x, &y); int kancelar[x][y]; int i; int q; for (q = 0; q < x; q++)

我已尝试通过以下方式设置自定义数组大小:

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

int main()
{
    int x;
    int y;

    printf("Array size:");
    scanf("%d %d", &x, &y);

    int kancelar[x][y];
    int i;
    int q;

    for (q = 0; q < x; q++)
        for (i = 0; i < y; i++)
            kancelar[q][i] = getchar();

    for (q = 0; q < x; q++)
        for (i = 0; i < y; i++)
            putchar(kancelar[q][i]);

    return 0;
}
但没有运气,价值观是错误的。我用的是C

scanf("%d %d",&x,&y);
int kancelar[x][y];
不能使用变量值创建数组,只能使用常量值。因此,要创建自定义数组,需要动态地为数组分配内存

我已从该链接获取此代码:


查看链接,因为它们显示了实现此目的的多种方法

每次输入后按Enter键,输入缓冲区中出现的换行符会把您弄得一团糟。每次在使用getchar之前,都需要使用换行符

一个简单的解决方案可能看起来像

printf("Array size:");
scanf("%d %d%*c",&x,&y);  //eat up the newline
int kancelar[x][y];
int i;
int q;
for(q = 0;q < x;q++)
{
    for(i = 0;i < y;i++ )
    {
        kancelar[q][i] = getchar();
        getchar(); //eat up newline
    }

}

怎么了?请澄清你所说的“值是错误的”是什么意思?您得到了什么值以及您希望得到什么值?@DanielKubica您可以编辑您的问题而不是scanf%d%d,&x,&y;->扫描%d%d%*c,&x,&y,显示您的输入。@DanielKubica显示您的输入。并解释值是错误的。是的,您可以,它被称为VLA,即,如果您有C99编译器或更高版本1,则从malloc中删除强制转换,因为它是不必要的2 DECLARE r和c 3释放分配的memory@AndersK. 我不知道。@CoolGuy谢谢!大约1个malloc返回void指针,我们不需要先强制转换它吗@sami1592 void*将自动转换。阅读感谢,但现在它给了我5行输入时,需要3x4阵列,输出仍然是错误的
printf("Array size:");
scanf("%d %d%*c",&x,&y);  //eat up the newline
int kancelar[x][y];
int i;
int q;
for(q = 0;q < x;q++)
{
    for(i = 0;i < y;i++ )
    {
        kancelar[q][i] = getchar();
        getchar(); //eat up newline
    }

}