0

整数の動的な 1D 配列を入力として取得しようとしています。状況は、入力がいくつあるかわからないということです。次のコードがありますが、間違っていることはわかっています。どうすればこれを達成できるか教えてください。

     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

次に、各引数のテキストを含む-style 文字列 ( -terminated ) のargv配列です。cNULconst char *

厳密に言えば、argv配列は必要以上に 1 長く、最後のエントリは NULL ポインタであることが保証されていることに注意してください。


標準オタクの場合、適切な 2011 標準はありませんC++。これは N3337 からのものです。

3.6.1 主な機能

...

2 実装は、main関数を事前に定義してはなりません。この関数はオーバーロードされません。type の戻り値の型を持つ必要がありintますが、それ以外の場合、その型は実装定義です。すべての実装は、 の次の定義の両方を許可する必要がありますmain

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

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

後者の形式argc では、プログラムが実行される環境からプログラムに渡される引数の数になります。argcがゼロでない場合、これらの引数は、ヌル終了マルチバイト文字列 (ntmbs) (17.5.2.1.4.2) の最初の文字へのポインターとしてargv[0]スルーで提供され、使用される名前を表す ntmbs の最初の文字へのポインターになるものとします。プログラムまたは "" を呼び出します。の値は非負でなければなりません。の値はです。[ 注: さらに (オプションの) パラメーターを の後に追加することをお勧めします。—終わりのメモ]argv[argc-1]argv[0]argcargv[argc]0argv

于 2013-06-05T14:21:21.860 に答える