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