如何避免 int 变量的 char 输入?

问题描述 投票:0回答:5

下面的程序显示了同时输入和输出的“int”值。但是,当我输入一个字符时,它会进入无限循环,显示先前输入的“int”值。如何避免输入字符?

#include<iostream>
using namespace std;

int main(){
int n;

while(n!=0){
            cin>>n;
            cout<<n<<endl;
           }
return 0;
}
c++ integer character cin
5个回答
15
投票

无限循环的原因:

cin 进入失败状态,这使得它忽略对其的进一步调用,直到错误标志和缓冲区被重置。

cin.clear();
cin.ignore(100, '\n'); //100 --> asks cin to discard 100 characters from the input stream.

检查输入是否为数字:

在您的代码中,即使是非 int 类型也会被强制转换为 int 。如果不将输入放入字符数组并对每个数字调用

isdigit()
函数,则无法检查输入是否为数字。

函数 isdigit() 可用于区分数字和字母。该函数位于

<cctype>
标题中。

is_int() 函数看起来像这样。

for(int i=0; char[i]!='\0';i++){
    if(!isdigit(str[i]))
    return false;
}
return true;

3
投票

您需要检查 cin 失败

还有

您需要清除输入流

请参阅以下示例。 它在最近的编译器中进行了测试

#include <iostream>
using namespace std;

void ignoreLine()
{
    cin.clear();
    cin.ignore();
}

int main(int argc, char const* argv[])
{
    int num;
    cout << "please enter a integer" << endl;
    cin >> num;

    while (cin.fail()) {
        ignoreLine();
        cout << "please enter a integer" << endl;
        cin >> num;
    }

    cout << "entered num is - " << num << endl;

    return 0;
}

2
投票

如果您想使用用户定义函数,您可以使用 ascii/ansi 值来限制字符输入。

48 -57 是0到9值的范围


2
投票
#include <iostream>
#include <climits> // for INT_MAX limits
using namespace std;
int main()
{
    int num;
    cout << "Enter a number.\n";
    cin >> num;
    // input validation
    while (cin.fail())
    {
        cin.clear(); // clear input buffer to restore cin to a usable state
        cin.ignore(INT_MAX, '\n'); // ignore last input
        cout << "You can only enter numbers.\n";
        cout << "Enter a number.\n";
        cin >> num;
    }
}

0
投票

但是当我使用它时,它正在读取我输入的第一个数字。它迫使我再次输入才能继续。我该如何解决这个问题?

© www.soinside.com 2019 - 2024. All rights reserved.