Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何避免int变量的字符输入?_C++_Integer_Character_Cin - Fatal编程技术网

C++ 如何避免int变量的字符输入?

C++ 如何避免int变量的字符输入?,c++,integer,character,cin,C++,Integer,Character,Cin,下面的程序显示同时输入和输出的“int”值。但是,当我输入一个字符时,它进入一个无限循环,显示前面输入的“int”值。如何避免输入字符 #include<iostream> using namespace std; int main(){ int n; while(n!=0){ cin>>n; cout<<n<<endl; } return 0; } #包括 使用名称空间s

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

#include<iostream>
using namespace std;

int main(){
int n;

while(n!=0){
            cin>>n;
            cout<<n<<endl;
           }
return 0;
}
#包括
使用名称空间std;
int main(){
int n;
而(n!=0){
cin>>n;

cout无限循环的原因:

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

cin.clear();
cin.ignore(100, '\n'); //100 --> asks cin to discard 100 characters from the input stream.
检查输入是否为数字:

在您的代码中,即使是非int类型也会转换为int。如果不将输入放入char数组,并对每个数字调用
isdigit()
函数,则无法检查输入是否为数字

此功能可用于区分数字和字母。此功能出现在
标题中

is_int()函数如下所示

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

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

48-57是0到9个值的范围
#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;
    }
}
#包含//用于整数最大限制 使用名称空间std; int main() { int-num; cout>num; //输入验证 while(cin.fail()) { cin.clear();//清除输入缓冲区以将cin恢复到可用状态 cin.ignore(INT_MAX,'\n');//忽略最后的输入 库特数; } }
您需要检查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;
}
#包括
使用名称空间std;
无效信号线()
{
cin.clear();
cin.ignore();
}
int main(int argc,char const*argv[]
{
int-num;
库特数;
while(cin.fail()){
ignoreLine();
库特数;
}

我可以在谷歌上搜索一下吗?我发现cin的某些“状态”被改为false,这使得它跳过cin语句并继续执行coutit。如果你能给我一个例子,那就太好了。我必须输入“int”或“char”吗?