我的rpn-calculator工作,但有問題。問題在於它會打印出每個連續的計算結果。在哪裏放置printf以避免在我的rpn計算器中進行多次打印?
我已經嘗試了不同的方法來解決這個問題,最新的一個是添加一個整數,每個計算都會增加一個整數,如果這個整數高於0,以及只有一個數字在堆棧上打印。
但是,如果有多個計算正在進行(例如,寫入5 5 + 10 5 * *),則會導致打印出10 500個問題,因爲第一次計算後堆棧中只有一個項目。
我該如何解決這個問題?
#define MAX_STACK_SIZE 100
#define MAX_BUFFER_SIZE 100
char buff[MAX_BUFFER_SIZE];
double x, stack[MAX_STACK_SIZE];
double t;
int i, k=0, num_operand=0;
int main(void) {
while(x != 'q') {
if(scanf("%s", buff) < 1)
{ return 0;
}
if(isdigit(buff[0]) || isdigit(buff[1])) {
sscanf(buff, "%lf", &x);
if (num_operand < MAX_STACK_SIZE)
{
stack[num_operand]=x;
num_operand ++;
} else { printf("Make stack bigger\n");}
} else {
switch(buff[0]) {
case '+': stack[num_operand - 2] = stack[num_operand - 1] + stack[num_operand - 2];
num_operand --;
num_operand --;
t = stack[num_operand];
k++;
num_operand ++;
break;
case '-': stack[num_operand - 2] = stack[num_operand - 2] - stack[num_operand - 1];
num_operand --;
num_operand --;
t = stack[num_operand];
k++;
num_operand ++;
break;
case '/': stack[num_operand - 2] = stack[num_operand - 2]/stack[num_operand - 1];
num_operand --;
num_operand --;
t = stack[num_operand];
k++;
num_operand ++;
break;
case '*': stack[num_operand - 2] = stack[num_operand - 1] * stack[num_operand - 2];
num_operand --;
num_operand --;
t = stack[num_operand];
k++;
num_operand ++;
break;
} }
if (num_operand == 1 && k !=0) {
k = 0;
printf("%lf \n", t); }
}
}
'x!='q'':'x'的類型是雙倍的。 – BLUEPIXY
閱讀整個表達式然後對其進行評估,而不是在閱讀時逐位評估表達式。 – molbdnilo
注意:'printf(「%lf \ n」,t);'不會打印「10 500」,而是「10.000000 \ n500.000000 \ n」'。細節很重要。 – chux