创建一个函数使 cin 只允许数字

Creating a Function to make cin only allow numbers

#include<iostream>
#include<limits>
using namespace std;
int main()
{

    cout << "Enter an int: ";
    int x = 0;
    while(!(cin >> x))
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Invalid input.  Try again: ";
    }
    cout << "You entered: " << x << endl;        
}

我想用这段代码创建一个简单的函数。 所以我做了以下。但它显然会 运行 cin 两次 我如何做到它只使用 cin 一次?

void nInput(int x)
{

//cout << "Enter an int: ";
int y = 0;
while (!(cin >> y)) 
{
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Invalid input.  Try again: ";
}
cout << "You entered: " << y << endl;
}

int main()
{
    int a;
    cout << "Enter an int:  ";
    cin >> a;
    nInput(a);
}

我试过改变

 while (!(cin >> y)) 

 while (!(x >> y)) 

但这并没有真正起作用。提前致谢。

您没有在 nInput() 内部使用 x,因此在调用 nInput() 之前调用 cin >> a 没有任何意义,因此只需将其删除即可。如果你不想 cin 被调用两次,那么不要调用它两次以开始:

int nInput()
{
    cout << "Enter an int:  ";
    int y = 0;
    while (!(cin >> y)) 
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Invalid input.  Try again: ";
    }
    cout << "You entered: " << y << endl;
    return y;
}

int main()
{
    int a = nInput();
    // use a as needed...
}