将代码从一个命令行参数更新为两个

时间:2012-10-10 18:14:37

标签: c++ command-line

我的代码执行以下操作:

const char* filename = argc >= 2 ? argv[1] : "stuff.jpg";

将照片作为命令行参数读入并显示它。

我现在想要拍两张照片,我试过这段代码:

const char* filename = argc >= 3 ? argv[1] : "stuff.jpg", argv[2] : "tester.jpg";

但我收到这样的错误:

error: expected initializer before ‘:’ token

有人知道什么是错的吗?是否有以编程方式进行此输入的模拟器方式?

3 个答案:

答案 0 :(得分:2)

你在这里处理一个三元if-operator。看看this page。它基本上是一个内联if语句。

代码可以做你想要的东西,看起来有点像这样:

const char* filename1 = argc >= 2 ? argv[1] : "stuff.jpg";
const char* filename2 = argc >= 3 ? argv[2] : "tester.jpg";

这会留下两个文件名变量,分别存储提供的参数或默认值(stuff.jpgtester.jpg)。

答案 1 :(得分:2)

要以易于使用的格式获取所有参数:

int main(int argc, char* argv[])
{
    std::vector<std::string>   args(&argv[1], &argv[argc]);

    // args.size() is the number of arguments.
    //             In your case the number of files.
    //             So now you can just loop over the file names and display each one.

    // Note The above is guranteed to be OK
    // As argv[] will always have a minimum of 2 members.
    //   argv[0]    is the command name           thus argc is always >= 1
    //   argv[argc] is always a NULL terminator.

}

答案 2 :(得分:1)

当您需要4张,5张或更多张照片时会发生什么? 伪代码:

 vector<char *> photos;
    if(argc > 1)
    {
       for i to argc-1
          photos.push_back(argv[i]) ;
    }