C ++命令行提示符不应重复

时间:2018-10-09 16:25:42

标签: c++ io command-line-arguments

我的程序从命令行获取输入,并且应该能够处理单字符和多字符命令,如下所示:

A.objects.filter(b__label="name", b__value="John", b__label="age", b__value=20)

但是现在我的程序的行为如下:

prompt> A  
A response
prompt> AB  
A response  
B response  

如何构造循环以解决此问题?
现在我有:

prompt> AB
A response
prompt>
B response

2 个答案:

答案 0 :(得分:1)

  

如何构造循环以解决此问题?

一种方法是:

  1. 将输入作为令牌读取。
  2. 遍历令牌的字符
  3. 根据需要处理每个字符。

std::string token;
std::cout << prompt;
std::cin >> token;
for ( char command : token )
{
   switch(command) { ... }
}

如果您希望将空格字符视为命令,则必须使用std::getline来读取一行文本并遍历该行的字符。

std::string line;
std::cout << prompt;
std::getline(std::cin, line);
for ( char command : line )
{
   switch(command) { ... }
}

答案 1 :(得分:0)

假设命令被声明为字符,则您的代码完全按照您说的做。

for(;;)
  cout << prompt // prompt user types AB
  cin >> command  // read one char A
  // error checking
  switch(command) { ... } // process it
}

现在循环播放并重新提示。

您需要

for(;;)
{
  cout << prompt
  cin >> commandString // std::string
  for(auto command : commandString) // loop over each char
  {
   switch(command) { ... }
  }
}