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