0

我正在尝试获取一个动态的一维整数数组作为输入。情况是我不知道我会有多少输入。我有以下代码,但我知道它错了。你能告诉我如何实现这一目标吗?

     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 参数。请在这里帮助我。这真的很有帮助。提前致谢

4

2 回答 2

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是基于argc. 当然,您必须将字符串值复制argv[x]到向量中的相关位置,也许使用std::stoi(...)将其转换为整数值。

于 2013-06-05T14:20:24.540 回答
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-style 字符串数组(NUL-terminated const char *s),其中包含每个参数的文本。

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


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

3.6.1 主要功能

...

2 实现不应预定义main功能。该功能不得重载。它的返回类型应该是 type int,否则它的类型是实现定义的。所有实现都应允许以下两种定义main

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

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

后一种形式argc 是从程序运行的环境传递给程序的参数数量。如果argc不为零,则这些参数应作为指向以空结尾的多字节字符串 (ntmbs s) (17.5.2.1.4.2) 的初始字符的指针提供,并且argv[0]应是指向表示使用的名称的 ntmbs 的初始字符的指针调用程序或“”。的值应为非负数。的值应为。[注意:建议在. ——尾注]argv[argc-1]argv[0]argcargv[argc]0argv

于 2013-06-05T14:21:21.860 回答