使用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/