8

我有一个 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>>,但我不能这样做,因为我在集群上运行程序。

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一个指向 的指针数组char,每个指针都指向一个传递的参数。第一个参数通常是可执行文件的路径,后续参数是启动应用程序时传入的任何内容,以指向char.

在这种情况下,您需要将char*'s 转换为s。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*因为您需要转换为floatsdoubles在您的情况下

于 2012-07-03T17:16:08.373 回答