我的程序从命令行获取输入,并且应该能够处理单字符和多字符命令,如下所示:
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
答案 0 :(得分:1)
如何构造循环以解决此问题?
一种方法是:
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) { ... }
}
}