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

C++ command line prompt shouldn't repeat

本文关键字:命令行 提示符 C++      更新时间:2023-10-16

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

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

但是现在我的程序的行为是这样的:

prompt> AB
A response
prompt>
B response

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

for(;;)
cout << prompt
cin >> command
// error checking
switch(command) { ... }

如何构建循环来解决此问题?

一种方法是:

  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) { ... }
}

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

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) { ... }
}
}