| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4595 人关注过本帖
标题:怎样判断输入数据的类型是否和变量定义时的类型一致
只看楼主 加入收藏
rossi789
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-8-13
收藏
 问题点数:0 回复次数:13 
怎样判断输入数据的类型是否和变量定义时的类型一致
比如
#include <iostream.h>
main()
{
int a;
for(;;)
{
cin>>a;
if(条件)
{cout<<“输入正确”<<endl;
break;}
else cout<<"输入有误,请重新输入!"<<endl;
}
system("pause");
}

if里面该怎么写,当输入a所定义的整形数据时程序完成,而输入其他类型的数据时,比如输入了字符型数据,则出错,返回重输。直到正确为止

搜索更多相关主题的帖子: 变量 定义 数据 整形 类型 
2006-01-25 15:43
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
我试了一下。
如果a是整型,而输入的是字符型,那么a没有被赋值。

你可以给a赋个初值,输入数据之后,判断a的值是否被改变,如果仍然是初值,就表明,输入的类型错误。
不过这个方法需要保证,输入的数据和a的初值不能相等。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-25 15:58
rossi789
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-8-13
收藏
得分:0 
我改了一下,新的问题又来了。我输入一个字符型数据时它却滚屏提示出错,照理应该是返回到cin>>a,等待我重新输入。不知道怎么回事
图片附件: 游客没有浏览图片的权限,请 登录注册

2006-01-25 16:22
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

输入的类型和接受输入的变量类型不匹配 是不会被赋值的.

问题在于cin的状态会被设置为false,将不再接受后续的输入.

cin.clear()可以用来重置状态.

用cin.get()把缓冲区的不匹配的输入处理掉.(可能有更好的清除输入缓冲的办法,我只知道这一种).


2006-01-25 16:29
rossi789
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-8-13
收藏
得分:0 
我输入小数它照样会被接收
2006-01-25 16:34
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

只读取了小数点前面的,

.和后面的留在缓冲里了


2006-01-25 16:46
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 

#include <iostream>
using namespace std;
int main()
{
int a =-1;

for (;;)
{
cin>>a;
bool bRet = cin.good();
if(!bRet)
{
cout<< "error";
break;
}
else
{
cout << "corret";
break;
}
}

system("pause");
return 0;
}

刚去查了书,判断输入操作是否成功可以用 good()这个函数。如果为真,说明前一个操作成功,下一个操作可能成功。否则一定失败。
然后我把程序改成上面那样,就没问题了。


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-25 16:49
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
wood说的很对。又学到了很多阿。

查了书,书上说:如果输入小数,他会把小数点开始的部分作为供输入读的下一个字符。
那么这个输入操作应该是失败了。

[此贴子已经被作者于2006-1-25 17:44:21编辑过]


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-25 16:50
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

[此贴子已经被作者于2006-1-26 11:03:30编辑过]


2006-01-25 16:59
rossi789
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2005-8-13
收藏
得分:0 

用这个函数也可以了。
留在缓冲里的小数对后面的操作有什么影响呢
按照要求输入小娄的话也要判断为错该怎么弄呢
#include <iostream.h>
main()
{
int a;
while(!(cin>>a)){
cin.clear();
cin.ignore();
cout<<"error"<<endl;
}
cout<<"true"<<endl;
system("pause");
}

2006-01-25 17:04
快速回复:怎样判断输入数据的类型是否和变量定义时的类型一致
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032481 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved