【问题标题】:How to use helper functions to fill an array of user input size?如何使用辅助函数来填充用户输入大小的数组?
【发布时间】:2020-11-03 14:55:19
【问题描述】:

这应该是一个简单的程序,首先询问用户方阵的大小(从 1 到 10),然后要求用户将数字输入到数组中,最后打印出输入数字的数组。

但是,现在输入诸如大小为 2 之类的值,值为 1、2、3、4

而不是获取数组

1.00  2.00
3.00  4.00

打印出来,它会打印出一堵 0.00 的长墙,其中某处有正确的值。

据我了解,在使用像 void someFunct(int arr[][MAX]); 这样的多维数组声明辅助函数时需要给出界限,在这种情况下,我将最大大小声明为 10。但如果我没记错的话,问题可能是从我那里做错了什么?

我正在测试的代码:

#include <stdio.h>

int numInput(char[]);
void fillArray(double[][10],int);
void printArray(double[][10],int);

int main() {
   // GET SQUARE ARRAY SIZE
   int n = numInput("Insert the dimension of the square array(1-10): ");
   // FILL THE SQUARE ARRAY A[n][n]
   double A[n][n];
   fillArray(A, n);
   // PRINT OUT ARRAY A[n][n]
   printArray(A, n);

   return 0;
}

int numInput(char text[]){
    int num;
    do{
        printf("%s", text);
        scanf("%d", &num);
    }while(num < 1 || num > 10);
    printf("\n");
    return num;
}

void fillArray(double arr[][10],int size){
    int i, j;
    for(i = 0; i < size; i++){
        for(j = 0; j < size; j++){
            printf("Insert A[%d][%d]: ", i, j);
            scanf("%lf", &arr[i][j]);
        }
    }
}

void printArray(double arr[][10],int size){
    int i, j;
    for(i = 0; i < size; i++){
        for(j = 0; j < size; j++){
            printf("  %.2lf  ", arr[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

【问题讨论】:

  • ^^^^^ 同样适用于printArray,以防这并不明显。

标签: arrays c


【解决方案1】:

只需更改您的函数以使用指定的变量大小:

void fillArray  (int size, double arr[size][size]);
void printArray (int size, double arr[size][size]);

注意size参数需要声明在数组参数的左边。

【讨论】:

  • 我不知道这是可能的。这绝对是比我更好的答案。
  • @Jabberwocky 好吧,您需要一个支持 VLA 的标准 C 编译器,因为这些参数实际上是指向 VLA 的指针。但是 main() 中的数组可以是 VLA 也可以是静态大小的数组,没关系。
【解决方案2】:

double A[n][n] 更改为double A[10][10];

如果n 是例如3,然后double A[n][n] 最终成为与double arr[][10] 不兼容的double A[3][3]

可变长度数组毕竟没那么有用,请谨慎使用。

【讨论】:

  • 相反:当您需要可变长度数组时,固定长度数组没有用处。只需要 72 个字节,为什么还要分配 800 个字节?
  • @Lundin 下面的回答更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多