c++ - 如何使 cin >> 不将 float 转换为整数?

标签 c++ integer cin

我有以下简单代码:

#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 需要一个整数但看到一个 float ,它将隐式地进行转换。那么这是否意味着当 cin 看到一个 float 时,它不处于 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 block 。

那么为什么在使用 cin 获取用户输入时会出现这种情况?如果有时我希望输入为 189,但不小心输入了 18.9,在这种情况下会导致 18,这很糟糕.那么这是否意味着使用 cin 获取用户输入的整数不是一个好主意?

谢谢。

最佳答案

当您读取一个整数并给它输入 1.5 时,它看到的是整数 1,并且它在句点处停止,因为它不是整数的一部分。 “.5”仍在输入中。这就是你只得到整数部分的原因,也是它似乎没有等待第二次输入的原因。

为了解决这个问题,您可以读取一个 float 而不是一个整数,这样它就可以读取整个值,或者您可以在读取整数后检查该行是否还有其他内容。

关于c++ - 如何使 cin >> 不将 float 转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15594995/

相关文章:

c++ - 错误 LNK2001 : unresolved external symbol WINAPI

c# - 将位图从 C++ DLL 传回 C# 时的行为不一致

c++ - fatal error c1083 "afxwin.h"

c++ - const_cast<double*> 有效但 const_cast<int*> 无效

c++ - 改变 C++ cin

c++ - Win8 如何将进程分类为 "Background Process"?我的应用程序在 Win7 中运行,但在 Win8 中没有显示 UI

java - 评估 localDate.now().minusDays(integer)

java - 从 2 字节大端读取 16 位整数

c++ - 使用 cin 对象进行输入验证并清除缓冲区 (c++)

c++ - 为什么 stringstream >> 在失败时更改目标值?