解決鍛鍊5-10在K&R後:C程序的令人驚訝的輸出當使用「*」乘以
編寫程序EXPR,其在命令行,其中每個計算一個逆波蘭表達運算符或操作數是一個單獨的參數。例如,expr 2 3 4 + *評估2 *(3 + 4)。
在'*'字符的表達式中似乎存在問題,即使是基本類似:2 2 *。出於某種奇怪的原因,'*'不會放入運算符數組中,而其他所有字符(如'+',' - ','/')通常都是。我已經隔離了代碼的一部分(while循環),這看起來是錯誤的。推送功能來自第4章,只需要編譯代碼。
#include <stdio.h>
void push(double f);
main(int argc, char *argv[])
{
int a = 0;
int b;
char operator[10];
while (--argc > 0) {
if (isdigit(*argv[argc]))
push(atof(argv[argc]));
else if (*argv[argc]=='+' || *argv[argc]=='-' || *argv[argc]=='*' || *argv[argc]=='/')
operator[a++] = *argv[argc];
}
for (b = 0; b < a; b++)
printf("%c", operator[b]);
printf("\n");
return 0;
}
#define MAXVAL 100 /* maximum depth of val stack */
int sp = 0; /* next free stack position */
double val[MAXVAL]; /* value stack */
/* push: push f onto value stack */
void push(double f)
{
if (sp < MAXVAL)
val[sp++] = f;
else
printf("error: stack full, can't push %g\n", f);
}
輸出
[[email protected] Desktop]$ ./prog + +
++
[[email protected] Desktop]$ ./prog *
[[email protected] Desktop]$ ./prog * *
[[email protected] Desktop]$ ./prog +/* -
-/+
哇,那很快!謝謝! – 2014-10-09 22:17:39
感謝您花時間回答這個問題。你救了我一大堆的驚愕。 – ptdecker 2016-06-07 12:43:50