我的许多程序都采用命令行参数,其中一个例子如下:
a.out [file-name] [col#] [seed]
然后,如果我想使用参数,我有很好的,易于使用的功能,例如:
atof(argv[..]) and atoi(argv[..])
我想知道C ++是否存在这样简单/简单的功能。我试着这么做:
cin >> col_num >> seed;
但这不起作用......它等待输入(不是命令行)然后输出它......
由于
答案 0 :(得分:11)
ato*
家庭很糟糕,无法正确发出错误信号。在C ++中,您希望使用boost::lexical_cast
或完整的命令行解析器,如boost::program_options
。
答案 1 :(得分:5)
解决方案1:
您可以使用lexical_cast
代替atoi
int x = boost::lexical_cast<int>("12345");
尽管在try-catch块中使用boost::lexical_cast
。当演员表无效时,它会抛出boost::bad_lexical_cast
。
解决方案2:
如果您不使用Boost并且需要标准C ++解决方案,则可以使用流。
std::string hello("123");
std::stringstream str(hello);
int x;
str >> x;
if (!str)
{
// The conversion failed.
}
答案 2 :(得分:4)
如果您想省去自己解析命令行参数的艰苦工作,可以随时使用boost::program_options
等库。
答案 3 :(得分:2)
如果您的意思是使用流和>>
运算符,则可以使用stringstream
:
double a; // or int a or whatever
stringstream(argv[1]) >> a;
您需要加入<sstream>
答案 4 :(得分:0)
您仍然可以使用atof
和atoi
。
#include <cstdlib>
int main(int argc, char* argv[]) {
float f = std::atof(argv[1]);
int i = std::atoi(argv[2]);
}
但您可以使用更多通用设施,例如boost::lexical_cast
。