如何检查用户输入的数字是否为整数?

时间:2019-02-01 07:54:09

标签: c++

我在检查整数时遇到困难。如果用户仅输入字符或仅输入特殊字符,或者仅输入整数或整数,或者在整数之前输入任何特殊字符,我都可以找到它,但是在整数之后不处理特殊字符的情况下。所以任何人请帮我。

port:cout << "Enter the port number:" << endl;
cin  >> nPort;
if(!cin)
{ 
    cout << "Invalid Port Number" << endl;
    cin.clear();
    cin.ignore(MAX_SIZE,'\n');
    goto port;
}

2 个答案:

答案 0 :(得分:0)

我认为链接的其他帖子并不准确。

以下代码将读取输入字符串。如果数字后面有一些非数字标记,则将忽略它们。无论如何,将读取整个输入字符串,因此之后cin为空。如果数字前有一些非数字输入,则整个操作将失败。

#include <iostream>
#include <sstream>
using namespace std;

int main() {
    cout << "enter number: ";
    int port;
    string readLine;
    getline(cin, readLine);

    stringstream reader(readLine);

    if(reader >> port)
    {
        std::cout << "Port is " << port;
    }
    else
    {
        std::cout << "Invalid input!";
    }

    return 0;
}

答案 1 :(得分:0)

首先,您必须验证为变量nPort提供的输入是否为整数,如果为整数,则应在端口范围内。

#include<iostream>
#include<iterator>
#include<string>
using namespace std;

bool is_number(string &port){
    string::iterator it = port.begin();
    while(it!=port.end() && isdigit(*it)) it++;
    return !port.empty() && it == port.end();
}

int main() {
    string nPort;
    cin >> nPort;
    if(is_number(nPort) && stoi(nPort)<=65535) cout << "Port Valid" << endl;
    else cout << "Port invalid" << endl;
    return 0;
}