0

私は次のコードを持っています:

#include "CmdLine.h"

void main(int argc, TCHAR **argv)
{

  CCmdLine cmdLine;



  // parse argc,argv 
  if (cmdLine.SplitLine(argc, argv) < 1)
  {
     // no switches were given on the command line, abort
     ASSERT(0);
     exit(-1);
  }

  // test for the 'help' case
  if (cmdLine.HasSwitch("-h"))
  {
     show_help();
     exit(0);
  }

  // get the required arguments
  StringType p1_1, p1_2, p2_1;
  try
  {  
     // if any of these fail, we'll end up in the catch() block
     p1_1 = cmdLine.GetArgument("-p1", 0);
     p1_2 = cmdLine.GetArgument("-p1", 1);
     p2_1 = cmdLine.GetArgument("-p2", 0);

  }
  catch (...)
  {
     // one of the required arguments was missing, abort
     ASSERT(0);
     exit(-1);
  }

  // get the optional parameters

  // convert to an int, default to '100'
  int iOpt1Val =    atoi(cmdLine.GetSafeArgument("-opt1", 0, 100));

  // since opt2 has no arguments, just test for the presence of
  // the '-opt2' switch
  bool bOptVal2 =   cmdLine.HasSwitch("-opt2");

  .... and so on....

}

私は CCmdLine クラスを実装しており、このメインはその使用方法の例です。入力値を取得する方法がわかりません。コンソールから scanf を使用してそれらを読み取ろうとしましたが、argc が増加せず、読み取りに失敗します。

私は C++ の初心者で、このコードを機能させる人を知りたいです。

ありがとう 。

4

3 に答える 3

1

Argcプログラムの開始時に渡された引数のみが含まれますargv したがって、を使用して実行するとmyapp.exe option1 option2 option3、次のargvようになります。

  • myapp.exe//<--argv[0]
  • オプション1//<--argv[1]
  • オプション2//<--argv[2]
  • オプション3//<--argv[3]

一言で言えば、プログラムが起動すると、mainへの引数は次の条件を満たすように初期化されます。

  • argcゼロより大きい。
  • argv[argc]nullポインタです。
  • argv[0]argv[argc-1]〜toは、実際の引数を表す文字列へのポインタです。
  • argv[0]プログラム名を含む文字列、または使用できない場合はnull文字列になります。の残りの要素はargv、プログラムに提供される引数を表します。

たとえば、ここでいくつかの詳細情報を見つけることができます。

後で(cinscanfまたはその他の方法で)入力を読み取ろうとしても、入力された値はに保存されませんargv。入力を自分で処理する必要があります。

于 2012-09-24T13:08:50.707 に答える
0

プログラムの実行中にコマンドラインから入力値を渡します。

program_name.exe arg1 arg2
于 2012-09-24T13:08:08.310 に答える
0

これは非常に簡単です。

void main(int argc, char **argv)
{
    std::string arg1(argv[0]);
    std::string arg2(argv[1]);
}
于 2012-09-24T13:08:56.397 に答える