C++中输入类型异常(输入int 型异常)怎么处理

睦知 2009-06-13 12:20:39
c++中怎么处理输入int型的输入类型异常?
例如:定义一个int型的数据,如果你输入的不是一个int型的,而是char型的,这个异常该怎么处理?
...全文
1750 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-06-13
  • 打赏
  • 举报
回复
一般我放弃任何在console上的复杂输入处理,如果输入要求很复杂,就用文件输入或者用GUI输入
pengzhixi 2009-06-13
  • 打赏
  • 举报
回复
你如果这么做,那么那个输入流的错误标志位会被设立为ture.
majun01 2009-06-13
  • 打赏
  • 举报
回复
如果int型为4个字节,则不论你的输入时什么,系统只是
从输入流中读出4个字节赋值给int型。
在系统看来只有字节个数,没有类型的概念。
睦知 2009-06-13
  • 打赏
  • 举报
回复
要求输入int型数据,当你输入的不是int型的时候,提示重新输入(或者是程序终止)改怎么做!
机智的呆呆 2009-06-13
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

int main()
{
int i=0;
if(cin>>i)
cout<<i<<endl;
else
cout<<"not int type"<<endl;
system("pause");
}

fice1989 2009-06-13
  • 打赏
  • 举报
回复
用int atoi(const char *)这个库函数可以搞定了,你可以去查下具体该函数的用法
我是这样处理的:
string str;
int n;
cin>>str;
n = atoi( str.c_str() );

头文件是#include <iomanip>

如果输入的不是数字,n是会取个什么值来的,忘记了,你可以去查下标准函数库
睦知 2009-06-13
  • 打赏
  • 举报
回复
能不能说下这两个函数fflush(istream),istream.clear(); 具体的用法?
Qlaiaqu 2009-06-13
  • 打赏
  • 举报
回复
对于错误输入时不会产生异常的,处理的方法是导致流的失败
流失败是指流的fail标志位被置位了,这时候就要fflush(istream),istream.clear();
这样就可以从新输出了
lzh9955 2009-06-13
  • 打赏
  • 举报
回复
关注
xmu_才盛 2009-06-13
  • 打赏
  • 举报
回复
cin 有返回值?

晕,我还真没注意过
Xiaoloveliuforever 2009-06-13
  • 打赏
  • 举报
回复
我也有这个疑问
如果输入的不是int型的数据 能不能通过一个if语句判断
若是int行就不做处理
若不是int型 就返回并重新输入呢
hjjdebug 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 majun01 的回复:]
如果int型为4个字节,则不论你的输入时什么,系统只是
从输入流中读出4个字节赋值给int型。
在系统看来只有字节个数,没有类型的概念。
[/Quote]
输入流还是比较聪明的。
如果你的数据类型是int, 程序会从输入流中读取属于int 的字符,就是由ascii '0'-'9'
构成的字符,并将其转化为int 型数据。
如果他没有找到整形数,流会置位错误状态。
利用c++的用户自定义数据类型,可以很方便检查这个错误状态。
例子:
int i;
if(cin>>i) // 这样写,就可以取得流的状态,正常非0,错误返回0
{
cout<< "input ok!"<<endl;
}
else
{
cout << "error ocurred"<<endl;
}
qwe66284455 2009-06-13
  • 打赏
  • 举报
回复
回复9楼:
加循环就会出错。
风老二 2009-06-13
  • 打赏
  • 举报
回复

int i = 0;
do {
cin.sync(); //清空流
cin.clear(); //清除流错误标记
cin>>i; //cin输入到int i,类型不符,超长将设置cin.fail为true
if (cin.fail)cout<<"输入错误,请重新输入"<<endl; //出错显示信息
} while (cin.fail) //出错循环
Sou2012 2009-06-13
  • 打赏
  • 举报
回复
有 条件状态
qwe66284455 2009-06-13
  • 打赏
  • 举报
回复
#include<iostream>
#include<conio.h>
using namespace std;

int zhengxing()
{
char b[10]="";
char c[20]="";
for(int i=0;i<=20;i++)
{
b[i]=getch();
cout<<b[i];
if(b[i]=='\r')
{break;}
if(b[i]<='0' || b[i]>='9')
{
cout<<endl<<"输入错误"<<endl;
cout<<"请重新输入"<<endl;
i=-1;
continue;
}
c[i]=b[i];
}
int z=strlen(c);
int cb=1;
int ad=0;
z--;
for(int ac=z;ac>=0;ac--)
{
int bg=c[ac];
bg=bg-48;
int zu=bg*cb;
ad=ad+zu;
cb=cb*10;
}
cout<<endl;
return ad;
}

void main()
{
long x;
cout <<"Input x:";
x=zhengxing();
cout<<"x="<<x<<endl;
}

64,675

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧