如何解决cin输入类型不匹配的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 16:42:57
我写了一段:
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
template <class TYPE>
TYPE CallForType(TYPE *number) //只读取变量的类型,若其它不匹配则返回值为0
{
if(! (cin>>*number))
{
cin.seekg(0, ios::beg);
cin.clear();
}
return *number;
}
void main()
{
int a;
while(1)
{
if(CallForType(&a))
cout<<a<<endl;
}
}
尽管如此,还是不能做下去。我希望既使输入了字母,屏幕显示为错误,继续做下去。输入整形数,屏幕回显,输入串,显示错误,然后继续读取输入。
cin.ignore();在这个程序加了可以。可是我的原程序改了还是不见好。
因为要输入一个整形的银行账号,但是假如用户输入的是一串字符,那么系统只用一第一个字母,后面的一串用来输入后面的选项。该怎样阻止呢?

那就先把整形的账号转为字符串来输入,判断是否含有非法字符,之后再把字符串转为long 形。我写了这些代码。
int InputIntOnly(char *string) //用户只能向屏幕输入数字
{
while(*string!='\0')
{
if((*string>='0'&&*string<='9'))
{
string++;
}
else
return 0;
}
return 1;
}

template <class TYPE>
void CharToNum(char *string,TYPE *num) //通过使用模版,把char型转换成任意型。这样通过读入字符串,再转换成int,long;
{
unsigned int m=strlen(string);
*num=0; ////未初始化则会出现数据错误
for(unsigned int i=0;i<m;i++)
{
*num=*num*10+(*(string++)-'0');
}
}

cin.seekg(0, ios::beg);
cin.clear();
cin.ignore(); <------------加上这句

当cin得不到正确输入时要做的是:
1、调用cin.clear取消cin的fail状态
2、调用cin.ignore清楚已输入内容
3、重新读cin