C语言的16进制计算器如何实现

现在已近实现了10进制的加减乘除,如何修改以下代码从而实现16进制的计算。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "windows.h"

#define MaxSize 31

char str[MaxSize];

void translate(char str[],char exp[]) {
struct{
char data[MaxSize];
int top;
}op;
char ch;
int i=0;
int t=0;
op.top=-1;
ch = str[i];
i++;

while(ch != '\0'){
switch(ch){
case '(':
op.top++;
op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '('){
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--;
break;
case '+':
case '-':
while(op.top != -1&&op.data[op.top] != '('){
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '/'||op.top == '*'){
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
case ' ':
break;
default:
while(ch >= '0'&&ch <= '9'){
exp[t] = ch;
t++;
ch = str[i];
i++;
}
i--;
exp[t] = '#';
t++;
}
ch = str[i];
i++;
}
while(op.top != -1){
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0';
}

float cal_value(char exp[]){
struct{
float data[MaxSize];
int top;
}st;
float d;
char ch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;

while(ch != '\0'){
switch(ch){
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else{
printf("\n\t除数不能为0");
exit(0);
}
st.top--;
break;
default:
d=0;
while(ch >= '0'&&ch <= '9'){
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
return st.data[st.top];
}

int main(void){
char str[MaxSize],exp[MaxSize];

while(1){
printf("输入算式\n");
scanf("%s",str);

translate(str,exp);
printf("=%g\n",cal_value(exp));
printf("\n");
}

system("pause");

return 0;
}

输入、输出是16进制就可以了,,,,,
所以,要识别输入16进制、、、、、、输出printf("%X\r\n", d) 来输出追问

试了的,不行。因为此程序的要求是,先输入16进制算式然后计算出16进制的结果。所以只能用char先把16进的数字和运算符号当做文字存起来。要是用scanf("%X", d)的话,无法正确的获取算式。输出的话可以用printf("%X\r\n", d) ,这我知道。问题是在输入的时候,用char获取算式之后,如何用现有的代码正确的计算这我就不知道了。

追答




温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网