如何检查输入数字整数是否不浮动?

时间:2016-10-18 22:52:37

标签: c++ visual-studio

我想检查输入是否有效,但是当我运行此代码时,我看到它只检查charcters的输入。如果我输入一个浮点数,它将采用它并使用整数而不是小数部分。

#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;
}
...        
      `

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

3 个答案:

答案 0 :(得分:1)

您可以尝试使用int将输入字符串转换为std::istringstream。如果成功,则检查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((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';
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

#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。)