小众知识

首页 > 正文

float a;

float a;
cin>>a;
我现在输入的是jjjj,不是浮点型,程序就会出错,
那么我怎么控制用户输入的一定是浮点型,而不是其他类型的?  

 sevecol 发表于:2003-10-10 13:16:18
得分:0 

使用char*读取,再来转化成float 

 dddd8888 发表于:2003-10-11 09:11:56
得分:0 

bool isfloat = false;

while (!isfloat)
{
    if (cin >> a)
    {
       isfloat = true;
     }

 fangjinhuo 发表于:2003-10-11 09:16:06
得分:0 

agree with sevecol(sevecol.blogone.net) 

 BestYunnan201 发表于:2003-10-11 10:42:03
得分:0 

既然你都定义的是浮殿型了!
你再输入一个字符串,那当然会出错了!
float a;
cout<<"请输入一个浮点数!";
cin>>a;
这样的提示不就让用户不会出错了!
除非操作的人不懂什么是浮点数!那就没办法了!

 micropentium6 发表于:2003-10-11 11:01:58
得分:80 

int ClearError(istream& isIn)        // Clears istream object,处理输入错误
{
streambuf*  sbpThis;
char        szTempBuf[20];
int         nCount, nRet = isIn.rdstate();

if  (nRet)                        // Any errors?
{
isIn.clear();                 // Clear error flags
sbpThis = isIn.rdbuf();       // Get streambuf pointer
nCount = sbpThis->in_avail(); // Number of characters in buffer

while (nCount)                // Extract them to szTempBuf
{
if  (nCount > 20)
{
sbpThis->sgetn(szTempBuf, 20);
nCount -= 20;
}
else
{
sbpThis->sgetn(szTempBuf, nCount);
nCount = 0;
}
}
}

return  nRet;
}
void main()
{
float i;
cin>>i;
while(cin.fail ())
{
   ClearError(cin);
   cin>>i;
}

 micropentium6 发表于:2003-10-11 11:04:12
得分:0 

对不起,忘了在前面加上#include 
                      using namespace std;

 Andy84920 发表于:2003-10-11 12:23:23
得分:0 

楼上的厉害!

学习中!


 RookieStar 发表于:2003-10-11 21:24:03
得分:0 

学习! 

 lemon520 发表于:2003-10-11 22:13:18
得分:0 

有没有可以使键盘某些键失灵的方法? 

 nmgpy 发表于:2003-10-11 22:21:44
得分:20 

小笨:请教一个问题
为什么 
while (nCount)                // Extract them to szTempBuf
{
if  (nCount > 20)
{
sbpThis->sgetn(szTempBuf, 20);
nCount -= 20;
}
else
{
sbpThis->sgetn(szTempBuf, nCount);
nCount = 0;
}
}
处理? 

 nmgpy 发表于:2003-10-11 22:23:22
得分:0 

为什么要判断是否大于20?
另外,这段代码有bug
dfksjfskdfa
ksdfsjdklasfjd
skdfjaskdfjasfjdk;sa
33333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333333
skdfjad
2348234
会codedown,可重现,麻烦小笨看一下是为什么,谢谢。 

 leebuilder 发表于:2003-10-17 15:28:14
得分:0 

用ASCII码限制 

 cmsbai 发表于:2003-10-17 20:32:12
得分:0 

用楼上“小笨”的流控制。
你也可以写一个类,在输入流中加入控制。 

 mmlymlymly 发表于:2003-10-18 13:05:42
得分:0 

楼上的强!!!!
为什么要判断是否大于20?szTempBuf[20]!
还有没看见你说的bug
有没有可以使键盘某些键失灵的方法 以前用tc时记得有个bioskey,vc下不知道是什么,或者可以嵌套汇编

 scatzr 发表于:2003-10-21 12:35:49
得分:0 

边界检查肯定是要放在代码中的,
输入的是一串东西,你得到的是另外一个东西,这个操作是不能要用户来完成的。
在控制台你是没有办法控制用户的输入的。
但是你可以采取下面的措施:比如说输入不能超过20个字符。
你可以告诉用户
if(len >20)
{
cout<<"你输入的字符超过20,本程序将只取前20个输入"<...操作
}

 mouseleeky 发表于:2003-10-21 22:51:00
得分:0 

如果你cin的类型不对的话,可以用if(!cin)判断出来:
比如:
float a;
cin>>a;
if(!cin)//输入的数转不成float
    ... 

上一篇:如何深入理解c++中的"重载"的概念?!
下一篇:如何判断某个对象是那个类的对象??

分享到: