我想将命令行参数传递给 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;
}