习题6-7 简单计算器 (20 分)模拟简单运算器的工作。

习题6-7 简单计算器 (20 分)模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:
1+2*10-10/2=
输出样例:
10

我把输入看出是字符串输入,做了不少弯路。

#include
#define max 100
int main(void)
{
  int sum=0,x=0,flag=1,flagg=1,count=0;
  char zfc[max];
  gets(zfc);
  char *p,*q;
   
  for(q=zfc;*q!='\0';q++)//检查是否有不合法字符 
  {
    if(*q>='0'&&*q<='9')
     flag=1;
    else if(*q=='+')
     flag=1;
    else if(*q=='-')
     flag=1;
    else if(*q=='*')
     flag=1;
    else if(*q=='/')
     flag=1;
    else if(*q=='=')
     flag=1;
    else 
    {
     flag=0;
     break;
    }
  }
  
  if(flag==0)
  {
    printf("ERROR");
  }
  else//当没有不合法字符 
  {
  
    for(p=zfc;*p!='\0';p++)//全部走一遍
    {
      //提取数字
      if(*p>='0'&&*p<='9')//判断数字
      {
        count=1;
        for(;;)//找到数字个位数与统计数字位数
        {
          p++;
          if(*p>'9'||*p<'0')
            break;
          count++;
        }
        p=p-count;//回到数字开头
        x=0;
        for(;;)
        {
          x=x+(*p-48);//字符转数字 
          x=x*10;
          
          p++;
          if(*p>'9'||*p<'0')//碰到运算符号退出 
            break;
        }
        x=x/10;
      }//成功提取数字,指针指向符号
    
      if(*(p-count-1)=='+'||*(p-count-1)=='\0')//四则运算
        sum=sum+x;
      else if(*(p-count-1)=='-')
        sum=sum-x;
      else if(*(p-count-1)=='*')
        sum=sum*x;
      else 
      { 
        if(x==0)//分母为零 
        {
          flagg=0;
          break;
        }
        else
          sum=sum/x;
     }
     
     if(*p=='=')
      break;
   }
   
  if(flagg==0)
    printf("ERROR");
  else 
    printf("%d",sum);
  }
  
  return 0;
}

上面的代码不简节甚至不合理
下面把输入看成连续字符输入,代码实现就非常简节

#include
int main()
{
 int i,sum,isnan=0;
 char op='0';
 
 scanf("%d",&sum);
 
 while(op!='=')
 {
  scanf("%c",&op);
  if(op=='=')
   break;
  scanf("%d",&i);
  if(op=='+')
   sum=sum+i;
  else if(op=='-')
   sum=sum-i;
  else if(op=='*')
   sum=sum*i;
  else if(op=='/')
  {
   if(i!=0)
    sum=sum/i;
   else
    isnan=1;
  }
  else
   isnan=1;
 }
 
 if(isnan==1)
  printf("ERROR");
 else
  printf("%d\n", sum); 
  
 return 0;
}

你可能感兴趣的:(习题6-7 简单计算器 (20 分)模拟简单运算器的工作。)