8

I have a program in C++ which I run for many values of a parameter. What I want to do is the following: Let's say I have two parameters as:

int main(){
    double a;
    double b;
//some more lines of codes
}

Now after after I compile I want to run it as

./output.out 2.2 5.4

So that a takes the value 2.2 and b takes the value 5.4.

Of course one way is to use cin>> but I cannot do that because I run the program on a cluster.

4

5 に答える 5

22

でコマンドライン引数を使用する必要がありますmain

int main(int argc, char* argv[]) {
    if (argc != 3) return -1;
    double a = atof(argv[1]);
    double b = atof(argv[2]);
    ...
    return 0;
}

atofこのコードは、;を使用してパラメーターを解析します。代わりに使用できますstringstream

于 2012-07-03T17:15:24.393 に答える
11

コマンド ライン パラメータを使用する場合は、手遅れなので使用しないでください。署名を次cinのように変更する必要があります。main

int main(int argc, char *argv[]) {
    // argc is the argument count
    // argv contains the arguments "2.2" and "5.4"
}

これargvで、 which は へのポインターの配列になりchar、各ポインターは渡された引数を指します。通常、最初の引数は実行可能ファイルへのパスであり、後続の引数はアプリケーションの起動時に渡されたものであり、char.

char*この場合、をに変換する必要がありますdouble

于 2012-07-03T17:15:32.573 に答える
4

それがコマンドライン引数の目的です:

#include <sstream>

int main(int argc, char *argv[])
{
    if (argv < 3)
       // show error
    double a, b;

    std::string input = argv[1];
    std::stringstream ss = std::stringstream(input);

    ss >> a;

    input = argv[2];
    ss = std::stringstream(input);

    ss >> b;

    // a and b are now both successfully parsed in the application
}
于 2012-07-03T17:16:57.940 に答える
3

ブーストプログラムのオプションを見たことがありますか?

他の多くの人が示唆しているように、コマンドライン引数を取り、非常に一貫性があり、クリーンで拡張可能なコマンドラインインターフェイスを提供できるようにします。

于 2012-07-03T17:21:33.900 に答える
0

この形式のmain()関数を使用して、コマンド ライン引数を取得できます。

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

    } 

argv[]配列の値には、char*変換する必要があるコマンドライン変数が含まれていfloatsますdoubles

于 2012-07-03T17:16:08.373 に答える