【发布时间】:2015-11-22 02:15:49
【问题描述】:
我想从scanf() 中读取一个符号,然后让 C 使用它。我当前的(相关)代码如下:
float a; /* First Number */
char sym; /* Symbol (i.e. +, -, /, *) */
float b; /* Second number.... */
puts("Please type your equation");
printf("$: ");
scanf("%f %c %f", &a, &sym, &b);
因此,如果用户要键入(在$: 提示符处)5 + 10,那么程序应该继续评估5 + 10,但我知道我不能指望 C 这样做(不是没有先发挥一些魔法:) 因为 '+' 只是一个 ANSI 字符代码,所以我要问的是:
我如何让 C 将变量 sym 当作我们(作为人)认为的变量(加号 +),然后用它来求解方程,就好像变量很难-编码值?
编辑 我现在明白这可能是不可能的(参见SLaks 的comment),所以任何解决方法都会很棒!
顺便说一句:我知道我可以使用
....
add(int a, int b)
{
return (1 + b);
}
....
if (sym == '+') {
add(a, b);
}
等等,但是当我开始包含更多内容时,只包含 a 和 b(例如 a、sym、b、sym2、c)并且用户拥有不止一种类型的运算符(例如2 + 4 - 6),这变得乏味且耗时。
【问题讨论】:
-
你不能那样做。你需要写一个解析器。
-
您不能在运行时执行 C 代码。您必须编写一个解析器来解析方程并执行它们,这是一项不平凡的任务。
-
你为什么要这样做?是否缺少计算器程序?
-
@DavidSchwartz 哈哈哈不,有足够的计算器程序,但是有什么比自己编程更好的学习方式?
-
@Ankush 那我有点疑惑你为什么会问不怎么写计算器程序。