我想问一下,如果不使用一堆额外的if语句,是否可以将包含运算符的char转换为使用类似一行或几行的实际运算符?我想象的是这样的:
对不起愚蠢的事,我只是一个先发。
char a;
scanf("%c", x);
if (x == '+' || x == '-' || x == '*' || x == '/')
a = b x c;
答案 0 :(得分:1)
C是一种编译而非解释语言 - 所有源都在编译时被转换为机器级指令,而不是在运行时,因此通常不可能 - 至少不能以任何方式合理地考虑 - 最合理的手段看起来像病毒或恶意软件代码行为。
你可以做的是实现像this one这样的表达式求值程序,其中整个表达式字符串被计算(不仅是运算符,还有操作数) - 基本上在代码中实现了解释器。
如果你想要的只是一行表达式来执行b
和c
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'或者是函数查找表,编译器不会执行任何魔法来将运行时决策转换为编译时选择。