注册 登录
编程论坛 C++教室

关于switch语句

aiyinsitan 发布于 2010-12-09 23:19, 595 次点击
#include "iostream.h"
#include "math.h"
#include "stdio.h"
zz(char *,int);
void main()
{
    char str1[8],*p1,*p2,a1,a2,*p;
    int i,j1=0,j2=0,k=0;
    double b1,b2;
    cin>>str1;
    p=str1;
    for(i=0;i<8;i++)
    {   
        
        if(str1[i]=='+'||str1[i]=='-'||str1[i]=='*'||str1[i]=='/')
            break;
            j1++;
        
    }
    p1=new char[j1];
    for(i=0;i<j1;i++)
    {
        p1[i]=str1[i];
    }
    a1=str1[i+1];
    for(i=i+1;i<8;i++)
    {
        if(str1[i]=='=')
        break;
        j2++;
    }
    p2=new char[j2];
    for(i=0;i<j2;i++)
    {
     p2[i]=str1[i+j1+1];
    }
    a2=str1[j1+j2+2];
  b1=zz(p1,j1);
   //cout<<b1;
   b2=zz(p2,j2);
   cout<<b2;
    //cout<<j1<<endl;
    //cout<<j2;
   if(a2=='=')
   {
       switch(a1)
       case '+':cout<<b1<<"+"<<b2<<b1+b2;break;
       case '-':cout<<b1<<"-"<<b2<<b1-b2;break;
       case '*':cout<<b1<<"*"<<b2<<b1*b2;break;
       case '/':
           if(b2==0)
           {
               cout<<"error!!"<<endl;
           }
           else
          cout<<b1<<"/"<<b2<<b1/b2;break;
       default:
           cout<<"输入错误:";break;
   }
   
}
zz(char *p,int n)
{
    double a,sum=0.00;
    int i=0;
    while(i<n)
    {
        a=(*p-48)*pow(10,n-1);
        sum=sum+a;
        //cout<<a<<endl;
        p++;
        n--;
        
    }
    return sum;

}
计算器的输出,结果要是保留两位小数,但是我的程序switch语句好像有点问题,麻烦帮忙看一下
7 回复
#2
aiyinsitan2010-12-09 23:20
输出结果是要保留两位小数该怎么搞??
#3
pangding2010-12-09 23:27
可以用:
cout << fixed << setprecision(2) << ...

当然也可以用
printf("%2f");
#4
pangding2010-12-09 23:28
哦,用第一个要
#include <iomanip>
#5
aiyinsitan2010-12-09 23:34
回复 4楼 pangding
可否帮我看看一下程序,switch语句那个地方好像又问题
#6
小治2010-12-10 00:44
你看一下这样可以吗?
#include "iostream.h"
#include "math.h"
#include "stdio.h"
double zz(char *,double);
void main()
{
    char str1[8],*p1,*p2,a1,a2,*p;
    int i,j1=0,j2=0,k=0;
    double b1,b2;
    cin>>str1;
    p=str1;
    for(i=0;i<8;i++)
    {   
        
        if(str1[i]=='+'||str1[i]=='-'||str1[i]=='*'||str1[i]=='/')
            break;
            j1++;
        
    }
    p1=new char[j1];
    for(i=0;i<j1;i++)
    {
        p1[i]=str1[i];
    }
    a1=str1[i+1];
    for(i=i+1;i<8;i++)
    {
        if(str1[i]=='=')
        break;
        j2++;
    }
    p2=new char[j2];
    for(i=0;i<j2;i++)
    {
     p2[i]=str1[i+j1+1];
    }
    a2=str1[j1+j2+2];
  b1=zz(p1,j1);
   //cout<<b1;
   b2=zz(p2,j2);
   cout<<b2;
    //cout<<j1<<endl;
    //cout<<j2;
   if(a2=='=')
   {
       switch(a1)
       { case '+':
           cout<<b1<<"+"<<b2<<b1+b2;
       break;
       case '-':
           cout<<b1<<"-"<<b2<<b1-b2;
           break;
       case '*':
           cout<<b1<<"*"<<b2<<b1*b2;
           break;
       case '/':
           if(b2==0)
           {
               cout<<"error!!"<<endl;
           }
           else
           {cout<<b1<<"/"<<b2<<b1/b2;
           break;}
       default:
           cout<<"输入错误:";
           break;
       }
   }
   
}
double zz(char *p,double n)
{
    double a,sum=0.00;
    int i=0;
    while(i<n)
    {
        a=(*p-48)*pow(10,n-1);
        sum=sum+a;
        //cout<<a<<endl;
        p++;
        n--;
        
    }
    return sum;

}
#7
南国利剑2010-12-10 00:46
回复 楼主 aiyinsitan
是否是在switch的那个有if else 分支的地方报错。
如果是的话,你把那个if else 语句块用一个{}括起来应该就没有问题。

祝你好运!
#8
aiyinsitan2010-12-10 12:45
感谢楼上各位
1