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

计算器的一个有关问题

2013-06-26 
计算器的一个问题#include dos.h#include math.h#include conio.h#include stdio.h #include std

计算器的一个问题
#include <dos.h>   
#include <math.h>   
#include <conio.h>  
#include <stdio.h> 
#include <stdlib.h>  
#include <stdarg.h>  
#include <string.h>  
#include <ctype.h>  //字符操作函数 用于isdigit判断是否为数字 
#define ESC 27 //定义esc 
double num1=0,num2=0,result=0;
int    opred=0,i=0,getnum=0,iserr=0,undoted=1,iseq=0;
char   ch,opr=' ',newopr=' ',temp[30]="\0";
////////////////////////////////////////////////////////////////////////////////
int len(double d) //字符串长度
       {
       char str[105]={0};  
       
       int u;   
       
       sprintf(str,"%lf",d); 
     
       for(u=0;str[u]!='0'&&str[u]!='\0';++u);  
        
       return u; 
   }
////////////////////////////////////////////////////////////////////////////////

void clearline()
{
int k;
for (k=0;k<15;k++) {printf(" ");};
for (k=0;k<50;k++) {printf("\b \b");};
}

////////////////////////////////////////////////////////////////////////////////
void calc()
{
   i=0;
   clearline();
   switch(opr)  //根据运算符号计算
     {
        case '+':result=num1+num2;       //做加法
                 if (len(result)>14)
                       {
                        clearline();
                        printf("E");
                        iserr=1;
                        break;
                        }
                 else  {
                        clearline();
                        printf("%lf %c %lf = %lf\n",num1,opr,num2,result);
                        num1=result;
                        sprintf(temp, "%lf",result);


                        break;
                       }

        case '-':result=num1-num2;       //做减法
                 if (len(result)>14)
                       {
                        clearline();
                        printf("E");
                        iserr=1;
                        break;}
                 else  {
                        clearline();
                        printf("%lf %c %lf = %lf\n",num1,opr,num2,result);
                        num1=result;
                        sprintf(temp, "%lf",result);
                        break;
                       }


        case '*':result=num1*num2;     //做乘法
                 if (len(result)>14)
                       {clearline();
                        printf("E");
                        iserr=1;
                        break;}
                 else  {

                        clearline();
                        printf("%lf %c %lf = %lf\n",num1,opr,num2,result);
                        num1=result;


                        sprintf(temp, "%lf",result);
                        break;
                       }



        case '/':if (num2!=0)          //做除法
                 {
                  result=num1/num2;
                  clearline();
                  printf("%lf %c %lf = %lf\n",num1,opr,num2,result);
                  num1=result;
                  sprintf(temp, "%lf",result);
                  break;
                 }
                 else
                 {
                   clearline();
                   printf("E");
                   iserr=1;
                   break;
                 }
     }

}
////////////////////////////////////////////////////////////////////////////////

int main()
{
int j=0;

      
  printf("//////////////////////////////////////////////////\n");
      printf("/////////////////////计算器///////////////////////\n");
      printf("////////数字键输入 +-×/做运算=得到结果///////////\n");
  printf("////////////////C归零D退格/////ESC退出////////////\n");
printf("0\b");
ch=getch();
while(ch!=ESC)
  {
  
   if  (ch=='c')
     {
      system("cls");
      
  printf("//////////////////////////////////////////////////\n");
      printf("/////////////////////计算器///////////////////////\n");
      printf("////////数字键输入 +-×/做运算=得到结果///////////\n");
  printf("////////////////C归零D退格/////ESC退出////////////\n");
       clearline();
       i=0;
       strcpy(temp,"0");
       num1=0;
       num2=0;


       result=0;
       undoted=1;
       opred=0;
       getnum=0;
       iserr=0;
       iseq=0;
       opr=' ';
       newopr=' ';
       printf("\b0\b");
     }
   if((isdigit(ch))&&(i<14)&&(iserr==0))        //判断是否是数字
     {
      if (i==0) 
       {
       strcpy(temp,"               ");
       opred=0;
                 }     //如重置,temp清空
      if (!((temp[0]=='0')&&(ch=='0')))          //判断开始是否重复输入0
         { 
         temp[i]=ch;
          printf("%c",temp[i]);
          i++;
         }
      if ((temp[0]=='0')&&(ch=='0')) printf("\b0\b");//输入0无反应 
     }
   if ((ch=='.')&&(i<14)&&(iserr==0))          //判断是否是小数点
     { 
     if ((i==0)&&(undoted==1))
      {
          strcpy(temp,"0");
          temp[0]='0';
          printf("0");
          i=1; 
          }   //判断开始是否输入.没有则补0
       if ((i!=0)&&(undoted==1)) 
       {
       temp[i]='.';
       printf("%c",temp[i]); 
       i++; 
       }  //输入.头部自动+0
       undoted=0;                      //输入一次. 改小数点标志值,下次不能再输入
     }
   if ((ch=='d')&&(i>0)&&(iserr==0))          
     { 
     if(temp[i-1]=='.') 
     undoted=1;                     //删除小数点后改小数点标志值
     temp[i-1]='\0';
     printf("\b \b");
     i--;
     if (i==0) printf("0\b");
     }    //退格
   if ((ch=='+')||(ch=='-')||(ch=='*')||(ch=='/'))


      {
      if (iserr==0)
        {
          newopr=ch;
          iseq=1;
          undoted=1;
          i=0;
          if (opred==0) getnum=getnum+1;             //判断是否重复按操作符,只记一次
          if (opred==1) printf("\b \b\b \b\b \b");   //如按过运算符号则回退修改运算符
          if (getnum==2)
              {
               num2=atof(temp);
               calc();
               getnum=1;
               opred=1;                               ///已有操作符标志置1
               if (iserr==0) printf("%lf",num1);
               if (iserr==0) printf(" %c ",newopr);

              }
          else {
               printf(" %c ",newopr);
               opred=1;                                   //已有操作符标志置1
               num1=atof(temp);                      //读入TEMP值到数字1
               }
         opr=newopr;
        }
       }
 if ((ch=='=')&&(iserr==0))
      {
       if ((opr=='+')||(opr=='-')||(opr=='*')||(opr=='/')) 
       { 
       if (iseq==1) 
       num2=atof(temp);
       calc();undoted=1;
       getnum=0;
       i=0;
       iseq=0;
       }
       else {
             num1=atof(temp);
             num2=0;
             result=0;


             undoted=1;
             getnum=0;
             i=0;
             iseq=0;
             calc();
             printf("%lf =%lf\n",num1,num1);
             }
      }
 ch=getch();
    
  }
}
连续等于之后我如果输入一个数再按等于如何实现得到这个数。。。比如输入1+2=3按等于连续等于3+2=5 再按1等于得到1=1求修改。我现在 按下的话还是连续等于 c 计算器 求帮助
[解决办法]
看到这么多的if  else  我顿时迷茫了,if else太多了,可读性就低了  不过我还是觉得  应该是你的程序还少了一个if吧加入堆用户输入‘=’号前是否输入数字进行处理吧

热点排行