C++ C+中的命令行参数+;
我的许多程序都采用命令行参数,其中一个示例如下:C++ C+中的命令行参数+;,c++,C++,我的许多程序都采用命令行参数,其中一个示例如下: a.out [file-name] [col#] [seed] 如果我想使用参数,我有很好的、易于使用的函数,例如: atof(argv[..]) and atoi(argv[..]) 我想知道C++是否存在这样简单的函数。我试着这么做: cin >> col_num >> seed; 但这不起作用。。。它等待输入(不是命令行),然后输出 谢谢解决方案1: 您可以使用lexical_cast代替atoi int x
a.out [file-name] [col#] [seed]
如果我想使用参数,我有很好的、易于使用的函数,例如:
atof(argv[..]) and atoi(argv[..])
我想知道C++是否存在这样简单的函数。我试着这么做:
cin >> col_num >> seed;
但这不起作用。。。它等待输入(不是命令行),然后输出
谢谢解决方案1:您可以使用
lexical_cast
代替atoi
int x = boost::lexical_cast<int>("12345");
ato*
系列很糟糕,不能正确地发出错误信号。在C++中,你想使用<代码> Boo::ListalyOxCase<代码>或一个完整的命令行解析器,如:代码> Boo::程序选项< /C> > < p>你仍然可以使用<代码> AT/<代码>和<代码> ATOI
#include <cstdlib>
int main(int argc, char* argv[]) {
float f = std::atof(argv[1]);
int i = std::atoi(argv[2]);
}
#包括
int main(int argc,char*argv[]){
float f=std::atof(argv[1]);
inti=std::atoi(argv[2]);
}
但是您可以使用更通用的工具,如
boost::lexical_cast
如果您想使用streams和>
操作符,您可以使用stringstream
:
double a; // or int a or whatever
stringstream(argv[1]) >> a;
你需要包括<代码> <代码> 如果你想自己保存解析CMD行参数的工作,你可以使用一个库,比如 <代码> < < /> > >代码> ATOI < /C> >如果你认为它们符合你的需要,就可以从C++中获得。为什么你突然停止使用<代码> ARGV < /代码>?我的意思是…这是参数数组…哦。我认为这些是C函数(显然与C++兼容)。我只是想知道是否有一个C++的方式来做它,你的实现支持了吗?我知道MSVC10有,但我不认为其他编译器有。boost::program_选项可能重复+1,这使事情变得更简单。boost看起来很棒。我要玩一会儿,看看能得到什么。我可能会切换到
boost::program\u options
,它看起来会起作用。虽然lexical\u cast
现在可以使用:)谢谢!使用ato检测错误太难?()。当我错误地键入命令“15 2”plop
时,它将完全错过2。反对这一观点的理由是人们没有那么愚蠢。我同意,但是脚本是,在脚本中使用了很多命令,在脚本中替换了参数,应该检查这些内容。
double a; // or int a or whatever
stringstream(argv[1]) >> a;