从命令行输入

时间:2012-07-03 17:12:58

标签: c++ command-line-arguments

我有一个C ++程序,我运行了很多参数值。我想做的是以下内容: 假设我有两个参数:

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

现在我编译完成后想把它作为

运行
./output.out 2.2 5.4

因此a取值2.2,b取值5.4。

当然一种方法是使用cin>>,但我不能这样做,因为我在群集上运行程序。

5 个答案:

答案 0 :(得分:20)

您需要在main中使用command line arguments

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

答案 1 :(得分:11)

如果你想使用命令行参数,那么不,你使用cin,因为为时已晚。您需要将main签名更改为:

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

所以你现在有argv这是一个指向char的指针数组,每个指针都指向一个被传递的参数。第一个参数通常是可执行文件的路径,后续参数是启动应用程序时传递的任何参数,以char的指针形式。

在这种情况下,您需要将char*转换为double

答案 2 :(得分: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
}

答案 3 :(得分:3)

你看过boost program options吗?

它将采用与许多其他人一样的命令行参数,并让您提供一个非常一致,干净和可扩展的命令行界面。

答案 4 :(得分:0)

您可以使用main()函数的这种形式来获取命令行参数

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

    } 

argv[]数组的值包含char*的命令行变量,在您的情况下需要转换为floatsdoubles