0

私は次のことを行うコードを持っています:

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

コマンドライン引数として写真を読み込み、表示します。

2枚の写真を撮りたいので、次のコードを試しました:

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.jpgおよびtester.jpg) を格納する 2 つのファイル名変数が残ります。

于 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 に答える