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

Updating code from one command line argument to two

本文关键字:更新 两个 参数 命令行 代码 一个      更新时间:2023-10-16

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

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

有人知道出了什么问题吗?有没有一种更类似的方法来以编程方式完成此输入?

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

可以执行您正在寻找的操作的代码看起来有点像这样:

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

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

为了以易于使用的格式获取所有参数,我这样做:

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.
}

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

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