关于开关的开关状态

About the do-while statment with switch

本文关键字:开关 状态 于开关      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main() {
    cout << "1. Facebook" << endl;
    cout << "2. Twitter" << endl;
    cout << "3. Instagram" << endl;
    cout << "4. SnapChat" << endl;
    int input;
    do {
        cout << "Enter a selection > ";
        cin >> input;
        switch(input) {
        case 1:
            cout << "Facebook is Loading..." << endl;
            break;
        case 2:
            cout << "Twitter is Loading..." << endl;
        case 3:
            cout << "Instagram is Loading..." << endl;
        case 4:
            cout << "SnapChat is Loading..." << endl;
            break;
        default:
            cout << "Wrong Selection" << endl;
        }
    }while(input =! 1 && input =! 2 && input != 3 && input != 4);
    return 0;
}

如果我选错了,我想重试进度,我感到困惑,不知道该怎么办,所以有人能告诉我应该做什么吗?

首先。。。

input =! 1 && input =! 2 && input != 3 && input != 4

则那些CCD_ 1应该是CCD_。

其次,如果有人键入非数字输入,cin >> input将失败,所有未来的输入尝试都将立即失败,甚至不需要等待用户进一步键入任何内容。您需要清除错误状态并忽略流中剩余的任何错误输入字符,比如直到行的末尾:

default:
    cout << "Wrong Selection" << endl;
    std::cin.clear(); // clear error state
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');.

您需要在程序顶部使用#include <limits>才能使用std::numeric_limts<>

另外,您的前两个case语句缺少break,将执行以下case(s(代码。。。。


我也建议显式检查cin >> input是否成功,尽管使用C++11可以保证在失败时将=!0设置为0,这样它就可以可靠地工作。对于C++03,没有这样的保证,并且在失败后,您可能会在input中留下任意垃圾,这可能恰好与case中的一个相匹配。要明确处理此问题,请执行以下操作:

if (!(cin >> input)) input = -1; // sentinel meaning erroneous

如果希望switch语句中断/退出,则需要确保在每个案例之后添加中断。否则,下面的一切都将被执行。你还把(不等于(并写入=!

#include <iostream>
using namespace std;
int main()
{
    cout << "1. Facebook" << endl;
    cout << "2. Twitter" << endl;
    cout << "3. Instagram" << endl;
    cout << "4. SnapChat" << endl;
    int input;
    do {
        cout << "Enter a selection > ";
        cin >> input;
        switch(input) {
        case 1:
            cout << "Facebook is Loading..." << endl;
            break;  
        case 2:
            cout << "Twitter is Loading..." << endl;
            break;  // add break
        case 3:
            cout << "Instagram is Loading..." << endl;
            break;  // add break
        case 4:
            cout << "SnapChat is Loading..." << endl;
            break;  // add break
        default:
            cout << "Wrong Selection" << endl;
        }
    } while(input != 1 && input != 2 && input != 3 && input != 4); // != not =!
    return 0;
}

在每个case:之后添加一个break语句

case 2:
cout << "Twitter is Loading..." << endl;
break; 
case 3:
cout << "Instagram is Loading..." << endl;
break;

=!更改为!=

while(input != 1 && input != 2 && input != 3 && input != 4);