0

我有执行以下操作的代码:

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

有谁知道怎么了?有没有类似的方式来以编程方式进行输入?

4

3 回答 3

2

您在这里处理的是三元 if 运算符。看看这个页面。它基本上是一个内联 if 语句。

可以做你正在寻找的代码,看起来有点像这样:

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

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

于 2012-10-10T18:19:41.563 回答
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.

}
于 2012-10-10T18:20:46.130 回答
1

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

 vector<char *> photos;
    if(argc > 1)
    {
       for i to argc-1
          photos.push_back(argv[i]) ;
    }
于 2012-10-10T18:21:49.523 回答