c# 要求用户输入二维数组大小的C程序

bjg7j2ky  于 2023-03-16  发布在  C#
关注(0)|答案(2)|浏览(201)

我正在编写一个C程序,要求用户输入两个变量,代表二维数组的大小,然后打印数组,我不知道问题出在哪里!

`#include <stdio.h>
int main(void) {
int n, x, i, j;
int arr[n][x];
printf("Enter no of columns:");
scanf("%d", &n);
printf("Enter no of rows:");
scanf( "%d", &x);
printf("Enter elements: \n");
for (i = 0; i < n; i++)
for (j = 0; j < x; j++)
 scanf("%d", &arr[i][j]);
for (i = 0; i < n; i++){
  for (j = 0; j < x; j++)
  printf("%d \t", arr[i][j]);
  printf("\n");
}   
return 0;```
}``
pjngdqdw

pjngdqdw1#

数组的此声明

int n, x, i, j;
int arr[n][x];
printf("Enter no of columns:");
scanf("%d", &n);
printf("Enter no of rows:");
scanf( "%d", &x);
//...

具有未定义的行为,因为变量n和x未初始化。您需要在向变量输入值后声明数组。
同样在数组声明中,行应该在列之前。
那就是你至少要写

int n, x, i, j;
printf("Enter no of columns:");
scanf("%d", &n);
printf("Enter no of rows:");
scanf( "%d", &x);
int arr[x][n];
//...

并且您需要检查输入的值是否为正值。
请注意,您应该在使用变量的最小作用域中声明变量。

jdzmm42g

jdzmm42g2#

在初始化了用于指定行和列的变量之后,需要声明可变长度数组arr *。我还建议对变量进行不同的命名,以免读者混淆。
示例:

#include <stdio.h>

int main(void) {
    int rows, cols;

    printf("Enter no of columns:");
    if(scanf("%d", &cols) != 1 || cols < 1) return 1;

    printf("Enter no of rows:");
    if(scanf("%d", &rows) != 1 || rows < 1) return 1;

    int arr[rows][cols]; // declare it after rows and cols have been initialized

    printf("Enter elements: \n");
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            if(scanf("%d", &arr[i][j]) != 1) return 1;
        }
    }

    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            printf("%d \t", arr[i][j]);
        }
        putchar('\n');
    }
}

相关问题