用户应该输入一个double,但是如果他们把一个放入,我怎么能让程序忽略一个字符串或一个char。我当前代码的问题是当我输入一个字符串时,程序将垃圾邮件并填满屏幕与cout<< “矩形的长度是多少”;
double length;
do {
cout << "What is the length of the rectangle: ";
cin >> length;
bString = cin.fail();
} while (bString == true);
答案 0 :(得分:1)
do {
cout << "What is the length of the rectangle: ";
cin >> length;
bString = cin.fail();
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
} while (bString == true);
这是我发现适用于我的问题的代码。
答案 1 :(得分:0)
cin.fail()
不会区分整数和浮点数。
检查的最佳方法是使用std::fmod()
函数检查提醒是否大于零。如果它是一个浮点数。
这是代码
#include <cmath>
int main()
{
double length;
std::cout <<"What is the length of the rectangle: ";
std::cin >> length;
if (std::cin.fail())
{
std::cout<<"Wrong Input..."<<std::endl;
} else
{
double reminder = fmod(length, 1.0);
if(reminder > 0)
std::cout<<"Yes its a number with decimals"<<std::endl;
else
std::cout<<"Its NOT a decimal number"<<std::endl;
}
}
请注意,此代码不会区分12和12.0。
答案 2 :(得分:-1)
如果用户输入的数据类型无效,则cin将失败。您可以使用此
进行检查double length;
while(true)
{
std::cout << "What is the length of the rectangle: ";
std::cin >> length;
if (std::cin.fail())
{
std::cout << "Invalid data type...\n";
std::cin.clear();
std::cin.ignore();
}
else
{
break;
}
}