【发布时间】:2012-11-18 20:13:40
【问题描述】:
我想将命令行参数传递给 main。它应该通过像 -a 4 这样的选项说明符来完成。对于单个字符和单个值,一切正常,但是当尝试为每个选项传递两个值时,它只有在最后放入时才有效。
当像这样使用./a.out -a 4 -b 6 -r 2 1时,以下代码可以正常工作
a:4
b:6
x_0:2
y_0:1
但是,如果使用 ./a.out -r 2 3 -a 32,则仅使用 a 和 b 的默认值。
a:1
b:1
x_0:2
y_0:3
和argv和argc的增量有关系吗?
感谢您的帮助。
代码:使用 g++ main.cc 编译
//--------------------------------------
// Includes
//--------------------------------------
#include <iostream>
#include <cstdlib>
//--------------------------------------
// Function Declarations
//--------------------------------------
void getArgsToMain(int argc, char *argv[]);
void showVars();
//--------------------------------------
// Variable declarations
//--------------------------------------
double a = 1.;
double b = 1.;
double x_0 = a;
double y_0 = 0.;
// typedefs and namespace
using namespace std;
// === FUNCTION ======================
// Name: main
// Description:
// =====================================
int main ( int argc , char * argv[] )
{
getArgsToMain(argc, argv);
showVars();
return 0;
}// ---------- end of function main ----------
//--------------------------------------
// Main function implementations
//--------------------------------------
void getArgsToMain(int argc, char *argv[])
{
while ((argc>1) && (argv[1][0]=='-'))
{
switch(argv[1][1])
{
case 'a':
a=atof(argv[2]);
break;
case 'b':
b=atof(argv[2]);
break;
case 'r':
x_0=atof(argv[2]);
if (!argv[3])
cout<<"Warning: No y_0 specified. Reverting to default."<<endl;
else
y_0=atof(argv[3]);
break;
default:
cout<<"Usage: blabla";
exit(0);
}
argv++;
argv++;
argc--;
argc--;
}
}
void showVars()
{
cout << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "x_0:" << x_0 << endl;
cout << "y_0:" << y_0 << endl;
}
【问题讨论】:
-
我可能错了,但从我所见,
Getopt似乎并不容易提供我想要的东西。我宁愿看 [boost.org/doc/libs/1_41_0/doc/html/program_options.html] (Boost)
标签: c++ command-line-arguments