コマンドライン引数をmainに渡したい。-a 4のようなオプション指定子を使用して実行する必要があります。単一の文字と単一の値の場合、すべてが正常に機能しますが、オプションごとに2つの値を渡そうとすると、最後に入力した場合にのみ機能します。
次のコードは、このように使用すると希望どおりに機能します./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;
}