【问题标题】:Provide integer arrays as input from command line提供整数数组作为命令行的输入
【发布时间】:2011-05-16 18:08:00
【问题描述】:

我正在编写一个程序来从一个库中访问一个装箱算法函数,自从大学以来我没有做过太多的事情,所以我的 C 有点生疏了。我正在调用的函数需要我传入 3 个不同的整数数组。我将从命令行调用它。我应该使用 argv 吗?还是标准输入?每个输入数组可能有 50 到 100 个元素。无论哪种方式,我想我都必须编写一些东西来解析字符串并将它们放入数组中,有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: c


    【解决方案1】:

    对于大数组,我宁愿使用标准输入,因为操作系统通常会限制您可以拥有多少个参数。

    您还需要某种输入格式。假设第一个数字n 是第一个数组中的元素数,然后是元素值,依此类推。然后我会做类似的事情:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
      // you need to implement read_number yourself
      int n = read_number(stdin);
    
      // allocate array
      int *array = (int*) malloc(n*sizeof(int));
    
      // read n numbers into array
      for ( int i=0; i < n; ++i )
        array[i] = read_number(stdin);
    
      // and so on...
    }
    

    你大概明白了。您要么必须自己实现read_number,要么在网上找到有关如何实现它的示例。您将需要以某种方式辨别单个数字,例如通过将每个数字解析到下一个空格字符。然后你可以用空格字符分隔标准输入上的每个数字。

    例如,您可以使用下面@ypnos 建议的 scanf 解决方案。

    【讨论】:

    • 我认为是参数的长度而不是参数的数量受到限制。
    【解决方案2】:

    对于这么多元素,您应该使用标准输入。无论如何,没有人会手动输入它们,./program &lt; file 就这么简单。

    解析与scanf无关。只需定义您的输入应包括构成数组的所有数字之前的元素数量。然后你可以scanf("%d", &amp;elemcount),然后在elemcount上进行for循环,再次使用scanf。 它的美妙之处在于 scanf 将处理所有的空格、换行符等。用户可能会在元素数量和其他数字之间添加。

    【讨论】: