如何修复 C++ 中的意外循环

问题描述

我正在制作一个具有 3 个服务的简单数据管理系统

  1. 添加学生。

  2. 查看学生信息。

  3. 删除学生

代码如下:

#include <iostream>
using namespace std;
enum Services
{
    Add=1,View,Del
};
class Student
{
public:
    string Name;
    int Age;
    string Gender;
    int Class;
    
    Student(string Name,string Gender,int Age,int Class)
    {
        this->Name=Name;
        this->Gender=Gender;
        this->Age=Age;
        this->Class=Class;
    }
};
int main()
{
    //Bio Variables
    string Name;
    string Gender;
    int Age;
    int Class;
    
    std::cout<<"•Add A Student [PRESS 1]\n•View Student's information [PRESS 2]\n•Delete A Student [PRESS 3]"<<endl;
    //Creating Instance Of Service ENUM
    Services Serv;
    do
    {
        cout<<"\nWhich Service Do You Want To Access :";
        int Service;
        cin>>Service;
        Service=0;
    }while(Serv!=Add || Serv!=View || Serv!=Del || !cin);
}

它工作正常,但是当我以字符串形式输入时,它会继续循环而没有给我再次输入的机会。

在以字符串形式提供输入之前:

Before giving input as string

输入字符串后:

After giving input in string

请帮我解决这个奇怪的错误

附注:- 代码尚未完成。

抱歉英语不好。

解决方法

如果流处于错误状态(例如,读取 !cin 失败),循环条件中的 true 将返回 int。更不用说@dxiv 提到的条件中奇怪的 != 了。您的意思可能是以下内容:

do
{
    cout << "\nWhich Service Do You Want To Access: ";
    int Input = 0;
    cin >> Input;
    Serv = static_cast<Service>(Input);
} while (cin && Serv >= Add && Serv <= Del);