【发布时间】:2013-03-13 18:21:22
【问题描述】:
我有以下简单代码:
#include <iostream>
int main()
{
int a;
std::cout << "enter integer a" << std::endl;
std::cin >> a ;
if (std::cin.fail())
{
std::cin.clear();
std::cout << "input is not integer, re-enter please" <<std::endl;
std::cin >>a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
当我运行上面的代码并输入:1.5,它输出:a is 1。仅供参考:我使用 gcc 4.5.3 编译和运行代码。
这意味着如果cin 需要一个整数但看到一个浮点数,它将隐式进行转换。那么这是否意味着当cin 看到一个浮点数时,它并不处于fail() 状态?为什么会这样?是不是因为C++对>>操作符做了隐式转换?
我还尝试了以下代码来确定给定的输入数字是否为整数,遵循这篇文章的想法:testing if given number is integer:
#include <iostream>
bool integer(float k)
{
if( k == (int) k) return true;
return false;
}
int main()
{
int a;
std::cout << "enter integer a"<< std::endl;
std::cin >> a ;
if (!integer(a))
{
std::cout << "input is not integer, re-enter please" ;
std::cin.clear();
std::cin >> a;
std::cout << "a inside if is: " << a <<std::endl;
}
std::cout << "a is " << a <<std::endl;
std::cin.get();
return 0;
}
此代码块也无法测试 a 是否为整数,因为当我使用浮点输入运行它时,它只是跳过了 if 块。
那么为什么在使用 cin 获取用户输入时会出现这种情况?如果有时我希望输入为189,但不小心输入了18.9,在这种情况下会导致18,这很糟糕。那么这是否意味着使用cin 获取用户输入整数不是一个好主意?
谢谢。
【问题讨论】:
-
第 4 行。int a; --->双a;
-
如果您将输入
a作为浮点数而不是整数,然后检查a == (int)a是否也会告诉您它是否是整数。 -
cin“知道”它正在读取什么类型,并根据类型执行不同的操作。对于 int,它读取数字,并在看到非数字时立即停止。在您的示例中,它不读取整个“1.2”,它在“1”之后停止,因为下一个字符不是数字。