首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

计算器有关问题----高手解决!

2012-02-09 
计算器问题----求助高手解决!!!我现在想要实现一个简单的计算器,本来是一个比较简单的问题,但是,我在编码

计算器问题----求助高手解决!!!
我现在想要实现一个简单的计算器,本来是一个比较简单的问题,但是,我在编码的过程中遇到几个问题:
1.限制用户的输入,我要求的是用户输入2个double型数据,我如何控制呢?
        double   t1,t2,t3;
        while(1)
{
                cout < < "\n请输入2个数: ";
                while(!   (cin> > t1> > t2)   )
{  
cout < < "请重新输入2个数: " < <endl;
                        cin.clear();
                        cin.ignore(80, '\n ');
}
用这段代码基本上能控制,但是,当我输入  123     123.45.6.7
系统接收123   123.45;我想问有什么办法控制用户输入我不期望出现的东西.
2.double的位数问题,我在float.h中看了double的有关设置
#define   DBL_DIG                   15                                             /*   #   of   decimal   digits   of   precision   */
#define   DBL_EPSILON           2.2204460492503131e-016   /*   smallest   such   that   1.0+DBL_EPSILON   !=   1.0   */
#define   DBL_MANT_DIG         53                                             /*   #   of   bits   in   mantissa   */
#define   DBL_MAX                   1.7976931348623158e+308   /*   max   value   */
#define   DBL_MAX_10_EXP     308                                           /*   max   decimal   exponent   */
#define   DBL_MAX_EXP           1024                                         /*   max   binary   exponent   */
#define   DBL_MIN                   2.2250738585072014e-308   /*   min   positive   value   */
#define   DBL_MIN_10_EXP     (-307)                                     /*   min   decimal   exponent   */
#define   DBL_MIN_EXP           (-1021)                                   /*   min   binary   exponent   */
#define   _DBL_RADIX             2                                               /*   exponent   radix   */
#define   _DBL_ROUNDS           1                                               /*   addition   rounding:   near   */
我怎样限制用户的输入要在这个表示范围呢???
3.以下是我现在的源代码:
#include <iostream.h>
#include   <stdio.h>
#include   <conio.h>
#include   "process.h   "


void   main()
{  
char     ch,op;
        double   t1,t2,t3;
        while(1)
{
                cout < < "\n请输入2个数: ";
                while(!   (cin> > t1> > t2)   )
{  
cout < < "请重新输入2个数: " < <endl;
                        cin.clear();
                        cin.ignore(80, '\n ');
}
cout < < "请输入操作符 " < <endl;
cin> > op;
switch(op)
{
case '+ ':t3=t1+t2;cout < < "结果是 " < <t3 < <endl;break;
case '- ':t3=t1-t2;cout < < "结果是 " < <t3 < <endl;break;
case '* ':t3=t1*t2;cout < < "结果是 " < <t3 < <endl;break;
case '/ ':
if(t2!=0)
{
t3=t1/t2;
cout < < "结果是 " < <t3 < <endl;
break;
}
else
{
cout < < "除数不能为0! " < <endl;
continue;
}
default:
cout < < "操作符输入错误! ";
continue;
}
cout < < "退出计算器吗?若是请按y或者Y,按n或者N继续! " < <endl;
cin> > ch;

        if(ch== 'y '||ch== 'Y ')
        break;
if(ch== 'n '||ch== 'N ')
continue;
    }//end   while(1)
//system( "pause ");
}
望各位高手帮忙!!!

[解决办法]
1 可以读取输入到string中,然后转化到 double 看看数据格式是否正确 ~
[解决办法]
命令行的小程序,就别太认真了,有足够检查就可以了。
[解决办法]
将输入成串
用正则式检查或自己检查串是不是符合double格式
[解决办法]
bool format(const char *p)
{
bool bResult = false;
const char *pos;
for (; *p != '\0 '; p++)
{
if (*p == '. ' && !bResult)
{
pos = p;
bResult = true;
}
else if (*p == '. ' && bResult)
return false;
}
if ((p - pos) <= 3)
return true;
return false;
}

我这里是((p - pos) <= 3 就是保留2位小数的,如果你是多点就多点

用atol有个不好就是象1..3这种也会被转成功






[解决办法]
用一个换行结束的while将输入以单字符存入数组,结尾加\0形成字符串
验证字符串的组成格式很容易

热点排行