我有一个 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
改用。
如果您想使用命令行参数,那么不,您不要使用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
这就是命令行参数的用途:
#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
}
你看过提升计划选项吗?
它将像许多其他建议的那样采用命令行参数,并让您提供一个非常一致、干净和可扩展的命令行界面。
您可以使用这种形式的main()
函数来获取命令行参数
int main(int argc, char* argv[]) {
}
其中argv[]
数组的值包含您的命令行变量,char*
因为您需要转换为floats
或doubles
在您的情况下