【问题标题】:Read a list of n numbers and make an array in C读取 n 个数字的列表并在 C 中创建一个数组
【发布时间】:2022-01-02 12:32:17
【问题描述】:

所以我想接受这样的输入:

第一个输入告诉我们数组的大小,第二行包含数组的数量,如下所示:

输入:

3
1 2 3

我想从第二个输入行创建一个数组,其大小从第一个输入行开始。

我目前有:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
        int n;
        scanf("%d", n);
        int x[n];
        int y[n];

}

但在那之后我被难住了。

【问题讨论】:

    标签: arrays c input printf scanf


    【解决方案1】:

    如果您有支持 VLA(可变长度数组)的编译器(例如 GCC):

    int n;
    scanf("%d", &n);
    int arr[n];
    scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);
    

    如果没有,

    int n;
    scanf("%d", &n);
    int *arr = malloc(n * sizeof(int));
    scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);
    

    此代码使用scanf 的功能能够接受多个分隔输入。

    如果您必须接受n 输入,并且不仅将arr 的大小设置为n,请执行以下操作:

    int n;
    scanf("%d", &n);
    int arr[n];
    
    for (int i = 0; i < n; i++) {
        scanf("%d", &n[i]);
    }
    

    很明显,VLA 功能允许您在堆栈上创建一个具有运行时值的数组。否则,您需要使用malloc() 在堆上分配它。

    【讨论】:

    • 如果要扫描的号码超过 3 个怎么办。我是否需要添加更多的 "%d" 和 arr[] 或者有什么方法可以处理第二行中的任意数量的数字。
    • @MidoriyaUzumaki 不需要。只需将 scanf 与单个 %d 一起使用,然后在循环中使用它 n 次。
    • @MidoriyaUzumaki 实际上,您让我意识到这个答案有点不完整。它仍然是正确的,因为您只根据需要指定大小。我会更新的。
    【解决方案2】:

    如果要扫描的数字超过 3 个怎么办。我需要添加更多吗 "%d" 和 arr[] 或者有什么方法可以与任意数量的 第二行的数字。

    要解决这一点,您可以使用循环迭代

    for(int i=0;i<n;i++)
    {
    scanf("%d",&array[i]);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2015-05-21
      相关资源
      最近更新 更多