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