|
> = の後に改行が必要というのでよければ、次のように書けます。
このプログラムですが、if (strchr("+-*/=", c)) return v; の部分が
気に入らないので、次のように修正します。
#include <stdio.h>
char c;
double expression(const char *s)
{
double v;
if (*s)
for (v = expression(s+2); c == s[0] || c == s[1]; )
switch (c) {
case '+': v += expression(s+2); break;
case '-': v -= expression(s+2); break;
case '*': v *= expression(s+2); break;
case '/': v /= expression(s+2); break;
}
else if (scanf("%lf %c", &v, &c) != 2) v = c = 0;
return v;
}
int main(void)
{
double v = expression("+-*/");
printf((c != '=') ? " error\n" : " %.15g\n", v);
return 0;
}
なぜ、if (strchr("+-*/=", c)) return v; が気に入らないかというと、
まず、ここで、c が '*' や '/' になることはあり得ないからです。
では、if (strchr("+-=", c)) return v; にすれば済むように思えますが、
あとで、括弧が使えるように仕様を拡張しようとしたとき、これを
if (strchr("+-=)", c)) にしなければならないなど、やっかいなことが
発生するからです。
|