输入cin进入死循环问题
#include<iostream>using namespace std;
int main()
{
int select = 0;
while (1)
{
cout << "输入" << endl;
cin >> select;
}
cin输入字符就会变成死循环
把输出cout注释掉就不会
} 这个问题可能是因为当cin输入的不是整数时,会出现错误并将输入流标记为错误,导致下次输入时无法读取正确的值。
为了解决这个问题,你可以在输入之前进行一些检查,例如判断输入是否为整数,如果不是,清空输入流并忽略该输入。可以尝试修改您的代码如下:
#include <iostream>
#include <limits> // 需要引入limits库
using namespace std;
int main() {
int select = 0;
while (true) {
cout << "请输入一个整数:" << endl;
if (cin >> select) {
// 输入成功
break;// 退出循环
} else {
// 输入失败
cout << "无效输入,请输入一个整数。" << endl;
cin.clear();// 清空输入流
cin.ignore(numeric_limits<streamsize>::max(), '\n');// 忽略当前输入行
}
}
cout << "你输入的整数是:" << select << endl;
return 0;
}
这样就可以避免cin输入字符导致死循环的问题了。 正如楼上所说的,因为输入的内容是 int,所以就死循环,唯一解决办法(指满足楼主愿意)就是改为 string,string 遇到数字也会默认他是字符:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string select;
while (1)
{
cout << "输入" << endl;
cin >> select;
}
}
这里的去掉cout不会循环是不完全对的,应该是不会循环输出了,因为cin读不到一个合法数字,就跳过了,就这样,一直跳过,输出,跳过,输出,不管去掉不去掉都是在死循环 本帖最后由 jhq999 于 2023-3-13 23:02 编辑
int main()
{
int select = 0;
while (1)
{
cout << "输入" << endl;
cin >> select;
if(cin.fail())cin.clear(),cin.ignore();
else cout<<select<<endl;
}
return 0;
}
解法很多,楼主自己看喜欢哪一个
页:
[1]