如何将包含char的运算符转换为C中的实际运算符

时间:2017-12-11 22:34:08

标签: c operators

我想问一下,如果不使用一堆额外的if语句,是否可以将包含运算符的char转换为使用类似一行或几行的实际运算符?我想象的是这样的:

对不起愚蠢的事,我只是一个先发。

char a;
scanf("%c", x);
if (x == '+' || x == '-' || x == '*' || x == '/')
a = b x c;

2 个答案:

答案 0 :(得分:1)

C是一种编译而非解释语言 - 所有源都在编译时被转换为机器级指令,而不是在运行时,因此通常不可能 - 至少不能以任何方式合理地考虑 - 最合理的手段看起来像病毒或恶意软件代码行为。

你可以做的是实现像this one这样的表达式求值程序,其中整个表达式字符串被计算(不仅是运算符,还有操作数) - 基本上在代码中实现了解释器。

如果你想要的只是一行表达式来执行bc x所选择的操作,那么以下内容将会这样做:

a = x == '+' ? b + c : x == '-' ? b - c : x == '*' ? x * c : x == '/' ? x / c : 0 ;

虽然为了便于阅读,我强烈建议拆分多行:

 a = x == '+' ? b + c : 
                x == '-' ? b - c : 
                           x == '*' ? x * c : 
                                      x == '/' ? x / c : 
                                                 0 ;

虽然实际上我强烈建议不要这样做!请注意,虽然上面的内容严格来说是单个表达式,但它可能比switch / case更少或没有效率,并且可能与if / else if相同。

作为初学者,你应该努力寻找简单易读的代码 - 即使代码更长。当你成为专家时,你会知道这样的代码通常是愚蠢的。通过代码重用获得编码效率,而不是通过编写更短的代码 - 经常使用一次写入。较短的代码通常不太通用,因此可重用性较低。

答案 1 :(得分:0)

不,您将需要为您希望应用的每个运营商单独声明,无论是否使用' if',' switch / case'或者是函数查找表,编译器不会执行任何魔法来将运行时决策转换为编译时选择。