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 类,这个 main 是如何使用它的一个例子。我很难理解如何获取输入值。我试图从控制台使用 scanf 读取它们,但 argc 不会增加并导致读取错误。

我是 C++ 的初学者,我想知道谁让这个代码工作。

谢谢 。

4

3 回答 3

1

Argc并且argv 包含程序启动时传递的参数。因此,如果您使用 , 执行它myapp.exe option1 option2 option3argv那么您将拥有:

  • 我的应用程序//<--argv[0]
  • 选项1//<--argv[1]
  • 选项2//<--argv[2]
  • 选项3//<--argv[3]

简而言之,当程序启动时,main 的参数被初始化以满足以下条件:

  • argc大于零。
  • argv[argc]是一个空指针。
  • argv[0]通过 toargv[argc-1]是指向表示实际参数的字符串的指针。
  • argv[0]将是包含程序名称的字符串,如果不可用,则为空字符串。的其余元素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 回答