是否应该使用C++中的switch语句来检查用户字符输入

问题描述 投票:0回答:1

我正在关注 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 语句。

c++ c++11 switch-statement
1个回答
0
投票

一般提供的代码是完全可以的。当然,您可能想要有“if”语句,但 switch 可以做到这一点。我建议的唯一更改如下:

 switch (answer) {
    case 'n':
        [[fallthrough]] (after C++17)
    case 'N':
        return false;
    case 'y':
        [[fallthrough]] (after C++17)
    case 'Y':
        return true;
© www.soinside.com 2019 - 2024. All rights reserved.