gpt4 book ai didi

c - 使用 scanf() 读取的符号作为 C 运算符

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:27 25 4
gpt4 key购买 nike

我想从 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 作为我们(作为人)将其视为(加号 +)然后使用它像变量具有硬编码值一样求解方程?

编辑我现在明白这可能是不可能的(请参阅 commentSLaks ),所以任何解决方法都会很棒!

作为旁注:我知道我可以使用

....
add(int a, int b)
{
return (1 + b);
}
....
if (sym == '+') {
add(a, b);
}

等等,但是当我开始包含更多时,ab(例如 asym, b, sym2, c) 并且用户拥有不止一种类型的运算符(例如 2 + 4 - 6) 这变得乏味且耗时。

最佳答案

你真的不能那样做。 C 是一种编译语言(C++ 也是),您不能在运行时将字符串当作 C 代码来执行。这些指令是在编译代码时生成的。其他解释型语言如 Python 支持这一点(例如 Python 中的 eval 函数)。使用 if 语句可能是最有效的方法。

也喜欢Jiang Jie said我会调查 reverse polish notation .这涉及使用堆栈来评估数学表达式并可以处理复杂的表达式。

您可能还需要考虑将中缀表达式(例如 1 + 2)转换为后缀表达式(1 2 +)。

关于c - 使用 scanf() 读取的符号作为 C 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com