如何检查输入的数字是否为整数不是浮点数

How to check if the input number integer not float?

本文关键字:是否 整数 浮点数 数字 何检查 检查 输入      更新时间:2023-10-16

我想检查输入是否有效,但是当我运行这段代码时,我看到它只检查输入的字符。如果我输入一个浮点数,它将会使用不带小数部分的整数。

#inclide <iostream>
using namespace std;
...
int n;
cout << "Your input is: "<<endl;
cin >> n;
while (cin.fail()) {
    cout << "Error. Number of elements must be integer. Try again: " << endl;
    cin.clear();
    cin.ignore(256, 'n');  
    cin >> n;
}
...        
      `

那么,如何使这段代码看到输入是否是浮点数?

您可以尝试使用std::istringstream将输入字符串转换为int。如果成功,则检查eof()(忽略空格后),以查看在转换为int时是否消耗了整个输入。如果整个输入都被消耗了,那么它就是一个有效的int

有点像这样:

int input_int()
{
    int i;
   // get the input
    for(std::string line; std::getline(std::cin, line);)
    {
        // try to convert the input to an int
        // if at eof() all of the input was converted - must be an int
        if(!line.empty() && (std::istringstream(line) >> i >> std::ws).eof())
            break;
        // try again
        std::cout << "Not an integer please try again: " << std::flush;
    }
    return i;
}
int main()
{
    std::cout << "Enter an integer: " << std::flush;
    std::cout << "i: " << input_int() << 'n';
}

以Raindrop7的解决方案为基础,这里是您需要的完整代码:

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double m;
    cout << "Your input is: "<<endl;
    cin >> m;
    while (cin.fail() || (m-floor(m)))
    {
        cout << "Error. Nubmer of elements has to be integer. Try again: " << endl;
        cin.clear();
        cin.ignore(256, 'n');  
        cin >> m;
    }
    int n = (int)m;
    return 0;
}

下面是一个示例输出:

Your input is: 
2.7
Error. Nubmer of elements has to be integer. Try again: 
erer
Error. Nubmer of elements has to be integer. Try again: 
2

下面的代码应该能够实现您希望实现的目标:

#inclide <iostream>
using namespace std;
int n;
cout << "Your input is: "<<endl;
while (!(cin >> n) || cin.get() != 'n') {
    cout << "Error. Number of elements must be integer. Try again: " << endl;
    cin.clear();
    cin.ignore(256, 'n');  
}

如果出现以下情况,程序要求用户重新输入整数:

  1. 如果程序无法从std::cin流中提取整数。(例如,当用户输入字符或字符串时)
  2. 如果提取成功后,std::cin中的下一个字符不是新的'n'行字符。(例如,输入带小数点的数字,如1.1,或输入后跟字符的整数,如1a)