在下面的循环中,如果我们输入字符作为cin输入而不是预期的数字,那么它将进入无限循环.有人可以向我解释为什么会这样吗?
当我们使用时cin,如果输入不是数字,那么有没有办法检测到这一点以避免上述问题?
unsigned long ul_x1, ul_x2;
while (1)
{
cin >> ul_x1 >> ul_x2;
cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl;
}
Run Code Online (Sandbox Code Playgroud) 这是代码
double enter_number()
{
double number;
while(1)
{
cin>>number;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input " << endl;
}
else
break;
cout<<"Try again"<<endl;
}
return number;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我输入类似1x的内容时,则将1作为输入,而不会注意到为另一次运行留下的字符.有没有办法让它适用于任何实数,例如1.8?
当你选择y时,试图找出为什么这将是一个无限循环.当用户选择y或Y时,它不应该离开do while循环吗?
#include <iostream>
using namespace std;
int main()
{
int choice;
do {
cout << "Enter a number. If you would like to quit, press y.";
cin >> choice;
if (choice % 2 == 1)
{
cout << "Odd \n";
}
else
{
cout << "Even \n";
}
} while (choice != 'y'|| choice != 'Y');
return 0;
}
Run Code Online (Sandbox Code Playgroud)