C ++中的命令行参数

时间:2011-09-01 14:55:46

标签: c++

我的许多程序都采用命令行参数,其中一个例子如下:

a.out [file-name] [col#] [seed]

然后,如果我想使用参数,我有很好的,易于使用的功能,例如:

atof(argv[..]) and atoi(argv[..])

我想知道C ++是否存在这样简单/简单的功能。我试着这么做:

cin >> col_num >> seed;

但这不起作用......它等待输入(不是命令行)然后输出它......

由于

5 个答案:

答案 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)

您仍然可以使用atofatoi

#include <cstdlib>

int main(int argc, char* argv[]) {
    float f = std::atof(argv[1]);
    int i = std::atoi(argv[2]);
}

但您可以使用更多通用设施,例如boost::lexical_cast