我正在关注 C++ 编程语言书籍,并发现了类似于以下代码的代码:
bool acceptSwitchWithRetry()
{
int tries = 0;
while (tries < 4) {
cout << "Do you want to proceed?" << endl;
char answer = 0;
cin >> answer;
switch (answer) {
case 'n':
return false;
case 'N':
return false;
case 'y':
return true;
case 'Y':
return true;
default:
cout << "I didn't understand that please specify one of following 'n','N','y','Y'" << endl;
++tries;
}
}
cout << "I will take that as no" << endl;
return false;
}
如果用户输入任何单个字符,代码工作正常,但如果输入十个多个字符,它们将保留在 cin 中,并且在循环的下一次迭代中,它甚至不要求用户输入字符,而是使用 cin 缓冲区中的下一个字符。
什么时候可以改进这段代码?
提前谢谢您。
我尝试使用字符串对象和 if,else 语句代替,但不使用 switch 语句。
一般提供的代码是完全可以的。当然,您可能想要有“if”语句,但 switch 可以做到这一点。我建议的唯一更改如下:
switch (answer) {
case 'n':
[[fallthrough]] (after C++17)
case 'N':
return false;
case 'y':
[[fallthrough]] (after C++17)
case 'Y':
return true;