首页 > 解决方案 > 如何阻止 C++ 自动将 double 转换为 int?

问题描述

如何阻止 C++ 自动将 double 转换为 int 值?我知道这是设计使然,但我不希望这样。

我有问题的代码如下:

double validateInput()
{
    int n = {};
    cin >> n;

    while (cin.fail() || (n < 1) || (n > 999))
    {
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        n = {};

        cout << "Please enter a valid number:" << endl;
        cin >> n;
    }

    cout << "n = " << n << endl; 
    return (double)n;
}

该函数应该采用整数值并在输入除整数值之外的任何内容时返回错误。但是,由于 C++ 在设计上将 double 转换为 int,因此转换后的 double 值仍然可以通过。

此外, cin.fail() 似乎不是立即触发,而是仅在另一个 cin 事件发生时触发。如何更改我的代码以在输入双精度值时立即触发 cin.fail()?

标签: c++11

解决方案


推荐阅读