在切换情况下,如何在以下程序中进行计算?为什么在此代码中评估最后一种情况?
我是新来学习C语言的人,我无法获得确切的定义。
C代码:
#incluse<stdio.h>
int main()
{
int ch ='a'+'b';
switch(ch)
{
case 'a':
case 'b':
printf("you enterd b\n");
case 'A':
printf("a as in ashar\n");
case 'b'+'a':
printf("you enterd a and b\n");
}
getch();
return 0;
}
答案 0 :(得分:0)
我认为您在切换情况下忘记使用break
了:
switch(ch)
{
case 'a':
// some expressions
break;
case 'b':
printf("you enterd b\n");
break;
case 'A':
printf("a as in ashar\n");
break;
case 'b'+'a':
printf("you enterd a and b\n");
break;
}
原因是当打开的变量等于大小写时,该大小写之后的语句将一直执行直到到达break
语句为止。并非每种情况都需要包含break
。如果没有break
出现,则控制流将落入后续情况,直到达到中断为止。
请访问this page
程序中的int ch = 'a' + 'b'
与case 'b'+'a':
相同,因此将产生printf("you enterd a and b\n");
表达式。
您可以 Try online
答案 1 :(得分:0)
在您的代码中,switch(ch)
导致控件跳转到表达式与case
值匹配的ch
标签(如果有)。由于ch
的值为'a'+'b'
,并且'a'+'b'
等于'b'+'a'
,因此控制跳至case 'b'+'a'
。
偶然地,当一个人希望switch
语句中的每个代码段是分开的时,必须在每个节(或某些其他跳转语句)的末尾放置一个break;
语句,如下所示: :
switch (ch)
{
case 'a':
case 'b':
printf("You entered a or b.\n");
break;
case 'A':
printf("A as in ashar.\n");
break;
case 'b'+'a':
printf("You entered a and b.\n");
break;
}
还请注意,当用户输入字符“ a”和“ b”时,将不会获得值'a'+'b'
。在C中,'a'+'b'
是字符a
的数字代码和字符b
的数字代码的总和。这不是两个字符的字符串连接。
答案 2 :(得分:-1)
Switch case的工作方式是这样的,如果ch =='a',那么将执行案例1;否则,如果ch =='b',则将执行案例2,依此类推。在每个案例之后,保持break语句以阻止案例之间的溢出。