使用cin方法获取变量时遇到麻烦。如果输入是数字,则没有问题,但是如果输入是点号[。]之类的特殊字符,
whileloop循环成无穷大。
我究竟做错了什么?

cout << "What is your race" <<endl<<"1.Human\n2.troll\n3.zombie"<<endl;
    cin >> *race;
    while(*race<1||*race>3)
    {
    system("cls");
    cout << "Wrong choice"<<endl<< "What is your race" <<endl<<"1.Human\n2.troll\n3.zombie"<<endl;
    cin >> *race;
    }


我搜索了答案,我应该必须刷新缓冲区,但我不知道如何去做。我对C ++还是很陌生。

最佳答案

race设置为字符,则可以执行以下操作:

while (*race < '1' || *race > '3')


这可能是您想要实现的。

说明:

cin >>转换为int时,会将给定的ASCII字符串转换为整数值。 .没有整数含义,因此不会读入race且未设置failbit-进一步>>禁止操作,直到您将其清除。但是,如果将cin >>放入char并将其与其他char(实际上是它们的ASCII码)进行比较,则可以轻松进行检查。

关于c++ - 当cin的输入是“点”时,while循环到无穷大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8487758/

10-12 14:48