我有这个密码
int a = 0; int b = 2; switch (a) { case a <= b: //<--error //Do something break; default: break; }
字符串我知道这可以用if/else语句来完成,但我很好奇,为什么它在switch/case语句中不起作用?这可以用“C”编程吗?
if
else
switch
case
des4xlb01#
你不能给予表达式在开关的情况下,你必须给予constant值,而不是表达式的情况下。switch语句是一个控制语句,它通过将控制传递给其主体中的一个case语句来处理多个选择和枚举您可以阅读更多关于交换机here的信息。
constant
bwntbbo32#
a <= B是bool表达式,但a是int。同样根据http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.90).aspx,每个case标签指定一个常量值。在你的例子中是表达式,而不是常量。
bool
a
int
szqfcxe23#
有几个原因使该语言被设计为需要恒定的大小写值,包括:(1)确保不会有重叠的范围(并且这可以在编译时检查)。(2)使switch语句具有极高的性能。(3)让C++程序员更熟悉(在早期,他们是C#新用户的很大一部分)。
dced5bon4#
因为在某些情况下,你应该指定a的可能值,而不是条件。
az31mfrm5#
如果你这样做,第一个案子将被执行
This exact code wont work switch(True) { case a<= b: //Do something break; }
字符串所以expression(True,在这种情况下)的结果与switch(True)的结果进行比较,比较结果看起来像这样:“Is True == True”;这显然会导致true,代码将运行。
5条答案
按热度按时间des4xlb01#
你不能给予表达式在开关的情况下,你必须给予
constant
值,而不是表达式的情况下。switch语句是一个控制语句,它通过将控制传递给其主体中的一个case语句来处理多个选择和枚举
您可以阅读更多关于交换机here的信息。
bwntbbo32#
a <= B是
bool
表达式,但a
是int
。同样根据http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.90).aspx,每个case标签指定一个常量值。在你的例子中是表达式,而不是常量。
szqfcxe23#
有几个原因使该语言被设计为需要恒定的大小写值,包括:
(1)确保不会有重叠的范围(并且这可以在编译时检查)。(2)使switch语句具有极高的性能。(3)让C++程序员更熟悉(在早期,他们是C#新用户的很大一部分)。
dced5bon4#
因为在某些情况下,你应该指定a的可能值,而不是条件。
az31mfrm5#
如果你这样做,第一个案子将被执行
字符串
所以expression(True,在这种情况下)的结果与switch(True)的结果进行比较,比较结果看起来像这样:“Is True == True”;这显然会导致true,代码将运行。