纯C语言 四则计算-CSDN博客

39 阅读1分钟

//这是边输入边计算的,复用性小

//已经改了三次,遇见左括号进入新的该函数活动,遇见右括号就返回值

#include<stdio.h>

#include<string.h>
double cal(double num1,char opt, double num2){
switch(opt){
case '+': return num1+num2;
case '-': return num1-num2;
case '*': return num1*num2;
case '/': return num1/num2;
}
}


double compute(){//该函数功能若是写成非边输入边处理的会好很多 
const char *cp="+-*/\n";
double num[3];
char opt[2];//本来想模拟栈,写着写着发现不用 
scanf("%lf",&num[0]);
while(!strchr(cp,opt[0]=getchar()));/*这里会把\n读进去 */if(opt[0]=='\n') return num[0]; 
scanf("%lf",&num[1]);//预先输入 num1 opt num2 
while(1){
while(!strchr(cp,opt[1]=getchar()));//有点乱
if(opt[1]=='\n') break;
scanf("%lf",&num[2]);
if((opt[0]=='+'||opt[0]=='-')&&(opt[1]=='*'||opt[1]=='/')){//← 
num[1]=cal(num[1],opt[1],num[2]);
} else{//→ 
num[0]=cal(num[0],opt[0],num[1]);
opt[0]=opt[1];
num[1]=num[2];
}

return cal(num[0],opt[0],num[1]);



int main(){
double ans;
ans=compute();
printf("%.2lf\n",ans);
return 0;
}