Bootstrap

关于c基础实现简易计算器的代码(加减乘除)

 输入为数字和算术符号组成的字符串,程序会根据运算级处理后输出结果,这是前段时间写的了,没有添加输入字母报错功能,当时我认为计算器上一般也没有字母按键,所以就没有写,但是现在想想计算器和这个代码实现的原理可能又不太一样,如果有借鉴者,自行加上就可以了。

 运行时会报一个gets的警告,这个不用管,因为我还没学fgets

calc.c: In function ‘main’:
calc.c:35:2: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
  gets(Input);
  ^~~~
  fgets
/tmp/ccGSFET8.o:在函数‘main’中:
calc.c:(.text+0x17c): 警告: the `gets' function is dangerous and should not be used.

 运行结果如下

9+12*3-10/2+6
46.00

代码如下 

#include <stdio.h>
#include <stdlib.h>//atoi
#include <string.h>
float S(float x,float y,char z){
	float num_temp=0;
	if(z=='*'){
		num_temp=x*y;
	}
	if(z=='/'){
		num_temp=x/y;
	}
	return num_temp;
}
float SS(float x,float y,char z,char zz){
	float num_temp2=0;
	if(zz==' '){
		return 0;
	}
	if(z=='+'){
		num_temp2=x+y;
	}
	if(z=='-'){
		num_temp2=x-y;
	}
	return num_temp2;
}

int main(int argc, const char *argv[])
{
	char Input[100]={0},Inchar[100]={0};
	float Innum[100]={0},num_1=0,num_2=0;
	int i=0,j=0;
	float num_temp1=0;
	char *p=Input;
	gets(Input);
	while(*p!=0){
		num_2=0;
		while(*p>='0'&&*p<='9'){
			num_1=*p-'0';
			num_2=num_1+num_2*10;
			p++;
		}
		Innum[i]=num_2;
		Inchar[i]=*p;
		i++;
		p++;
	}
	for(i=0;i<100;i++){
		if(Innum[i]==0){
			break;
		}
		num_temp1=S(Innum[i],Innum[i+1],Inchar[i]);
		if(num_temp1!=0){
			Innum[i+1]=num_temp1;
			Inchar[i]=' ';
		}
	}
	for(i=1;i<100;i++){
		if(Innum[i]==0){
			break;
		}
		num_temp1=SS(Innum[j],Innum[i],Inchar[j],Inchar[i]);
		if(num_temp1!=0){
			Innum[i]=num_temp1;
			j=i;
		}
	}
	printf("%.2f\n",num_temp1);
	return 0;
}

;