动态1D数组作为输入

时间:2013-06-05 14:12:21

标签: c++ dynamic user-input

我试图将动态1D整数数组作为输入。情况是我不知道我会有多少输入。我有以下代码,但我知道它错了。你能告诉我如何实现这个目标吗?

     int main(string path,string aligned_path,vector<int>cams)
     {
        string path = "/home/iiith/resect/output.txt";
        findpoints(cams,path);
     } 

凸轮的大小实际上是未知的。我不知道他们会提供多少个凸轮作为输入。我试图实现类似下面的内容

    ./a.out path1 path2 1 2 3 5 6

最后的数字将是凸轮。它可以是任意数量的凸轮。是否可以将它们作为输入接收?是否有可能像上面那样具有动态的inut参数。请帮帮我。这会非常有帮助。在此先感谢

2 个答案:

答案 0 :(得分:5)

您对main的定义无效。在C和C ++中,main具有严格的定义(尽管如果不使用则可以忽略参数):

int main(int argc, char **argv)

常见的扩展是传入环境变量:

int main(int argc, char **argv, char **envp)

如果根本没有使用参数:

int main()

main的参数定义如下argc是参数列表中的元素数。以下每个argv[0] .. argv[argc-1]都包含函数的参数。 argv[0]是可执行文件本身的名称。您的示例argv[1]path1

因此,您知道基于cams的{​​{1}}有多少argc。当然,您必须将argv[x]中的字符串值复制到向量中的相关位置,或许使用std::stoi(...)使其成为整数值。

答案 1 :(得分:2)

main的签名必须为int main(int argc, char* argv[])(或等效,或int main())。您可以将参数处理为在您自己的代码中更有用的内容。这是一个快速而草率的例子(没有适当的错误处理等)。

#include <iostream>
#include <cstdlib>
#include <vector>

int main(int argc, char * argv[])
{
    std::vector<int> nums;
    nums.reserve(argc-3);
    int pos = 3;

    // Read args into vector of ints
    while (pos < argc)
    {
        nums.push_back(atoi(argv[pos]));
        ++pos;
    }

    // Print them
    for (auto i : nums) std::cout << i << '\n';
}

这是一个运行:

$ ./a.out path1 path2 1 2 3 5 4
1
2
3
5
4

以防万一:argc包含传递的参数数量,包括程序名称。对于$ ./a.out argc=1$ ./a.out some list of args argc=5

然后argv是包含每个参数文本的c - 样式字符串(NUL - 终止const char * s)的数组。

请注意,严格来说argv数组比它需要的长1,并且最后一个条目保证是NULL指针。


对于标准极客,我没有正确的C++ 2011标准,这是来自N3337:

  

3.6.1主要功能

     

...

     

2实现不应预定义main函数。此功能不应过载。它应该有一个   返回类型int的类型,但其类型是   实现定义。所有实现都应允许两者   以下main的定义:

     

int main() { /* ... */ }

     

     

int main(int argc, char* argv[]) { /* ... */ }

     

后一种形式argc   应该是从中传递给程序的参数数量   程序运行的环境。如果argc非零   参数应在argv[0]argv[argc-1]中提供   指向以null结尾的多字节的初始字符的指针   字符串(ntmbs s)(17.5.2.1.4.2)和argv[0]应该是指针   ntmbs的初始字符,表示用于的名称   调用程序或“”。 argc的值应为非负数。该   argv[argc]的值应为0。 [注意:建议任何   在argv之后添加更多(可选)参数。 - 后注]