Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中将包含字符的运算符转换为实际运算符_C_Operators - Fatal编程技术网

如何在C语言中将包含字符的运算符转换为实际运算符

如何在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是

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

为一些愚蠢的事情道歉,我只是一个新手

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;两个更改。在发布问题之前搜索答案。你可能已经找到了。谢谢你的回答@莫格斯达德:这和我最初做的差不多,只是想知道是否还有一条更短的路。