计算器——C++实现

来源:互联网 发布:网站seo分析工具 编辑:程序博客网 时间:2024/05/30 04:12
//实现了+ - * /功能
#include <iostream>#include <cctype>#include <cstdlib>using namespace std;void eatspaces(char* str);double expr(char* str);double term(char* str,int & index);double number(char* str,int & index);const int MAX=80;int main(void){char buffer[MAX]={0};cout<<endl<<"Welcome to your friendly calculator"<<endl<<"enter an expression,or an empty line to quit"<<endl;for(;;){cin.getline(buffer,sizeof buffer);eatspaces(buffer);if(!buffer[0])return 0;cout<<"\t="<<expr(buffer)<<endl;}}void eatspaces(char* str){int i=0;int j=0;while((*(str+i)=*(str+j++))!='\0')if(*(str+i)!=' ')i++;return ;}double expr(char* str){double value=0.0;int index=0;value=term(str,index);for(;;){switch(*(str+index++)){case '\0':return value;case '+':value=value+term(str,index);break;case '-':value=value-term(str,index);break;default:cout<<endl<<"Baby,There is an error"<<endl;exit(1);}   }}double term(char* str,int & index){double value=0.0;value=number(str,index);while(true){if(*(str + index)=='*')value*=number(str,++index);else if(*(str + index)=='/')value/=number(str,++index);elsebreak;}return value;}double number(char* str,int & index){double value=0.0;if(!isdigit(*(str+index))){cout<<endl<<"Baby!!! There is an error"<<endl;exit(1);}while(isdigit(*(str + index)))value=10*value + (*(str + index++)-'0');if(*(str + index)!='.')return value;double factor=1.0;    while(isdigit(*(str + (++index)))){factor*=0.1;value=value + (*(str + index)-'0')*factor;}return value;}



0 0