scanf 2d数组大小C.

时间:2016-02-06 13:46:07

标签: 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++)
        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,

2 个答案:

答案 0 :(得分:1)

在每次输入后按 Enter 键,输入缓冲区中的newline混乱。每次进入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
    }

}

答案 1 :(得分:0)

scanf("%d %d",&x,&y);
int kancelar[x][y];

您无法创建具有变量值的数组,只能使用常量值来执行此操作。因此,要创建自定义数组,您需要动态地为您的数组分配内存

我已从此链接中获取此代码:LINK

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

int main()
{
    int r, c;
    scanf("%d %d",&r,&c);

    // allocating memory
    int *arr = (int *)malloc(r * c * sizeof(int));

    int i, j, count = 0;
    // giving them default values
    for (i = 0; i <  r; i++)
      for (j = 0; j < c; j++)
         *(arr + i*c + j) = ++count;

    // printing the values 
    for (i = 0; i <  r; i++)
      for (j = 0; j < c; j++)
         printf("%d ", *(arr + i*c + j));

   // free memory
   free(arr);

   return 0;
}

查看链接,因为它们显示了多种方式来实现此目标