检查c ++中的输入类型

时间:2015-06-01 09:18:12

标签: c++ typechecking

##检查在cpp ##

中输入的数据类型
int main()
{
    int num;
    stack<int> numberStack;
    while(1)
    {
        cin>>num;
        if(isdigit(num))
            numberStack.push(num);
        else
            break;
    }
return(0);
}

如果我将变量声明为整数,并输入一个字母,比如说'B'而不是数字,我可以检查用户的这种行为吗?当输入第一个数字并且不等待更多输入时,我的代码将退出。

3 个答案:

答案 0 :(得分:2)

首先,std::isdigit函数检查字符是否为数字。

其次,通过使用输入操作符>>,您将确保输入是一个数字,或者std::cin对象中将设置state flag。因此,例如。

while (std::cin >> num)
    numberStack.push(num);

如果出现错误,文件结尾或输入的内容不是有效int,则循环将结束。

答案 1 :(得分:0)

使用cin.fail()检查错误并清理输入缓冲区。

int num;
while (1) {
    cin >> num;
    if (cin.fail()) {
        cin.clear();
        cin.sync();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        continue;
    }
    if (num == -1) {
        break;
    }
    numberStack.push(num);
}   

答案 2 :(得分:-2)

首先将您的输入作为字符串

使用像isdigit()这样的库中的版本将其分类为整数

否则如果包含“。”,则为浮点数

否则,如果它是字母数字,那么它就是一个字符串

下面的代码

#include<iostream>
#include<string.h>
using namespace std;

int isint(char a[])
{
    int len=strlen(a);
    int minus=0;
    int dsum=0;
    for(int i=0;i<len;i++)
    {
        if(isdigit(a[i])!=0)
            dsum++;
        else if(a[i]=='-')
            minus++;        
    }
    if(dsum+minus==len)
        return 1;
    else 
        return 0;
}
int isfloat(char a[])
{
    int len=strlen(a);
    int dsum=0;
    int dot=0;
    int minus=0;
    for(int i=0;i<len;i++)
    {
        if(isdigit(a[i])!=0)
        {
            dsum++;
        }
        else if(a[i]=='.')
        {
            dot++;
        }
        else if(a[i]=='-')
        {
            minus++;
        }       
    }
    if(dsum+dot+minus==len)
        return 1;
    else
        return 0;
}
int main()
{
    char a[100];
    cin>>a; 

    if(isint(a)==1)
    {
        cout<<"This input is of type Integer";
    }
    else if(isfloat(a)==1)
    {
        cout<<"This input is of type Float";
    }
    else
    {
        cout<<"This input is of type String";
    }

}