0

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

4

2 回答 2

1

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

于 2013-02-24T09:32:23.007 回答
1

您很可能正在寻找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
...

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

于 2013-02-24T12:06:26.170 回答