【问题标题】:Reading multiple commands from one line of input in c++从c ++中的一行输入读取多个命令
【发布时间】:2013-02-25 21:26:02
【问题描述】:

假设输入可以是'x'、'y'和'z',并且对于每个commandX()、commandY()和commandZ()可以分别执行。而不是每次都输入然后按回车(即:x(enter)commandX()执行然后y(enter)commandY()执行......)我怎样才能让用户只输入一行(即:x y z (输入))然后命令按输入顺序连续发出? (即:在 x , y , z 中的执行顺序将是 commandX() 然后 commandY() 然后 commandZ())

【问题讨论】:

    标签: c++


    【解决方案1】:

    使用std::getline。从输入流中提取整行,然后从中处理每个命令。您可能希望将输出行包含在 std::istringstream 中以执行此操作。

    【讨论】:

      【解决方案2】:

      您很可能正在寻找getopt

      但是,您可以通过 while 循环实现相同的结果 - 对某些功能感到害羞:

      unsigned int i(1);
      bool run_x(false), run_y(false), run_z(false);
      
      while (i < argc and argv[i] == '-') {
      
          switch (argv[i + 1]) {
      
              case 'x':
                  run_x = true;
                  i += 2;
                  break;
      
              case 'y':
                  run_y = true;
                  y_value = argv[i + 1];
                  i += 3;
                  break;
      
              case 'z':
                  run_z = true;
                  i += 2;
                  break;
      
           }
      
      }
      

      程序的执行可以像这样执行:

      ./program -x -y 10 -z
      ./program -x -z
      ./program -z
      ./program -y 10 -z
      ...
      

      使用布尔值和其他变量来控制什么是/不是可选的。

      【讨论】:

      • @KayTee 你说的没有./program是什么意思?你想如何运行你的应用程序?
      • 我的意思是你如何在程序中而不是在命令提示符下。
      • @KayTee 好吧,这取决于您的输入。您必须定义要作为参数传递给程序的内容,以便您可以在其中做任何您想做的事情。如果您有来自输入文件的 xyz,您只需将数组 argv 替换为从文件中读取的字符数组。
      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2014-09-22
      • 2011-12-23
      • 2018-08-15
      相关资源
      最近更新 更多