整数或双精度1.0和1

Flo*_*ian 0 c++

我想读取一个双精度数字并确定输入是Integer还是double。问题是当我输入1.00(是双精度)时,我得到的结果是整数

double a;
cin >> a;
if (a == int(a))
    cout << "Integer";
else
    cout << "Double";
Run Code Online (Sandbox Code Playgroud)

Ayx*_*xan 5

您可以读入字符串并检查它是否包含小数点分隔符。假设它是“。”,这是一个示例实现:

#include <iostream>
#include <string>

int main()
{
  std::string s;
  std::cin >> s;
  std::cout << ((s.find('.') == std::string::npos) ? "integer" : "double") << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

您还必须检查指数(如2e-1)。这是完成这一切的一种方法:

#include <iostream>
#include <string>

int main()
{
  std::string s;
  std::cin >> s;
  if (s.find_first_of(".,eE") == std::string::npos)
    std::cout << "integer" << std::endl;
  else
    std::cout << "double" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @Florian您被困住了,因为您的任务无法完成。您无法阅读双打,然后知道使用了什么文本来产生该双打。当转换为双精度时,该信息丢失了。如上述答案所述,“仅”方式是将输入读取为“文本”并分析文本。如果您要这样做,则将文本转换为双精度。 (4认同)