开关盒如何评估?

时间:2019-02-17 05:46:11

标签: c

在切换情况下,如何在以下程序中进行计算?为什么在此代码中评估最后一种情况?

我是新来学习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;
}

3 个答案:

答案 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语句以阻止案例之间的溢出。