我有一个用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>>
,但我不能这样做,因为我在一个集群上运行程序。
我有一个用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>>
,但我不能这样做,因为我在一个集群上运行程序。
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
。
const char *argv[]
,只需使用char *argv[]
,直到修复为止。 - Richard J. Ross III如果你想使用命令行参数,那么不,你不应该使用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*
转换为double
。
int argc
,而不是 size_t
。如果我错了请纠正我。 - Linuxiossize_t
,但标准只要求接受int main()
和int main(int, char*[])
,其他任何形式都是实现定义的(至少根据我手边的C++98标准是这样的...)。 - Ed S.#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
}
你有没有看过Boost程序选项?
它会像其他许多建议的那样获取命令行参数,并允许您提供非常一致、清晰和可扩展的命令行界面。
main()
函数来获取命令行参数。 int main(int argc, char* argv[]) {
}
在这里,argv[]
数组的值包含了您的命令行变量,它们是 char*
类型的,您需要将它们转换为 floats
或 doubles