如何在C语言中将包含字符的运算符转换为实际运算符
我想问,如果不使用一堆额外的if语句,是否可以使用一行或几行将包含运算符的char转换为实际运算符?我想象的样子是这样的: 为一些愚蠢的事情道歉,我只是一个新手如何在C语言中将包含字符的运算符转换为实际运算符,c,operators,C,Operators,我想问,如果不使用一堆额外的if语句,是否可以使用一行或几行将包含运算符的char转换为实际运算符?我想象的样子是这样的: 为一些愚蠢的事情道歉,我只是一个新手 char a; scanf("%c", x); if (x == '+' || x == '-' || x == '*' || x == '/') a = b x c; 不,您必须为要应用的每个运算符提供单独的语句,无论是使用“if”、“switch/case”还是函数查找表,编译器不会执行任何魔术来将运行时决策转换为编译时选择。C是
char a;
scanf("%c", x);
if (x == '+' || x == '-' || x == '*' || x == '/')
a = b x c;
不,您必须为要应用的每个运算符提供单独的语句,无论是使用“if”、“switch/case”还是函数查找表,编译器不会执行任何魔术来将运行时决策转换为编译时选择。C是一种编译语言,而不是解释语言-所有源代码都在编译时转换为机器级指令,而不是在运行时,所以一般来说,这是不可能的——至少不是任何你应该合理考虑的——最合理的方法看起来像病毒或恶意软件代码行为。 您可以实现一个表达式求值器,就像整个表达式字符串不仅要求值运算符,还要求值操作数一样——本质上是在代码中实现一个解释器 如果您只需要一个单行表达式来对x选择的b和c执行操作,则以下操作将完成:
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 ;
尽管事实上我强烈建议不要这样做!请注意,尽管上述严格意义上是一个单一表达式,但它可能比开关/案例的效率低或不高,并且可能与if/else if相同
作为初学者,您应该努力获得简单易读的代码——即使代码更长。当你成为一名专家,你会知道这样的代码通常是愚蠢的。通过代码重用,而不是通过编写较短的代码(通常一次编写一次)来提高编码效率。较短的代码通常不太通用,因此可重用性较差。不,如果没有某种切换、查找或类似操作,这是不可能的。旁白:scanf%c,x;=>扫描%c,&x;两个更改。在发布问题之前搜索答案。你可能已经找到了。谢谢你的回答@莫格斯达德:这和我最初做的差不多,只是想知道是否还有一条更短的路。