计算器 /* HELP */
做一个计算器
例如 输入 6 2 3 + -
相当于 6-(2+3)=1
再比如 输入 1 2 + 3 4 - *
相当于 (1+2)*(3-4)=-3
思路:建立一个int或者double栈,输入数字的话压入栈中;输入运算符号的话,从堆栈里面弹出两个数据做四则运算,然后把计算结果压入栈中。......依次类推。
基本功不好 有没有高手帮忙写一下?
[解决办法]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
int iStack[100], j, k, iIn=0, iRlt=0;
size_t i;
char sIn[100], sTemp[10];
memset(sIn, 0, sizeof(sTemp));
printf( "请输入要计算的表达式,暂且只支持整数的加运算,且只能用一个空格分隔:\n ");
gets(sIn);
j = 0;//栈数组下标
k = 0;//操作数起始下标
printf( "\t-------------计算过程-------------\n ");
for(i=0; i <strlen(sIn); i++)
{
printf( "\tsIn[%d]=%c\n ", i, sIn[i]);
if(sIn[i] == ' ')
{
//操作数压栈
memset(sTemp, 0, sizeof(sTemp));
strncpy(sTemp, sIn+k, i-k);
iStack[j] = atoi(sTemp);
printf( "\tiStack[%d] %d\n ", j, iStack[j]);
//栈数组下标后移
j++;
//操作数起始下标赋值
k=i;
}
else if(sIn[i] == '+ ')
{
int i1, i2;
//操作数出栈
i1 = iStack[--j];
i2 = iStack[--j];
//运算并将结果压栈
iRlt = i1 + i2;
printf( "\t\tiRlt %d\n ", iRlt);
iStack[j++] = iRlt;
//跳过运算符后的空格
i++;
k=i;
}
}
printf( "\t-------------计算过程-------------\n\n ");
printf( "Input : %s\nResult : %d\n ", sIn, iRlt);
}