c开关语句

c开关语句,c,switch-statement,C,Switch Statement,当我跟踪这个C程序并输入选项为2时,它从case1块调用display函数。我不明白这一点。请解释一下。我真的很困惑。编译器可能正在重新整理您的源代码语句,从而使其崩溃。然后,调试器将两种情况下要显示的调用与相同的源行号相匹配。这在启用优化时很常见。当编译器在两种不同的情况下看到相同的函数调用时,它可能正在进行一些奇特的优化。检查编译器标志,和/或添加一些不同的参数以显示,以查看它是否真的按照您的指定被调用。编译器转换代码以提高效率。当您尝试调试时,这可能会让人困惑,因此您可能应该关闭优化。如何

当我跟踪这个C程序并输入选项为2时,它从case1块调用display函数。我不明白这一点。请解释一下。我真的很困惑。

编译器可能正在重新整理您的源代码语句,从而使其崩溃。然后,调试器将两种情况下要显示的调用与相同的源行号相匹配。这在启用优化时很常见。

当编译器在两种不同的情况下看到相同的函数调用时,它可能正在进行一些奇特的优化。检查编译器标志,和/或添加一些不同的参数以显示,以查看它是否真的按照您的指定被调用。

编译器转换代码以提高效率。当您尝试调试时,这可能会让人困惑,因此您可能应该关闭优化。如何实现这一点取决于您的编译器或IDE

如果您在代码中注意到在printf语句之后,case1和case2是相同的,那么您应该意识到,只需要一个调用来显示可能更有效——其中一个实例将跳转到另一个实例的最后一个语句,并且程序的结果是相同的


不过,你可以走得更远。因为案例1和案例2之间唯一的真正区别是打印的字符串,所以除了设置指向要打印字符串的指针的一点点代码外,您只能拥有整个代码块的一个副本。

在我看来还可以。输入1时会发生什么?它从case1块调用displau函数是什么意思?在您提供的代码中,从案例1和案例2中都调用了Display。您期望的输出是什么,您看到了什么?您能否显示您得到了什么以及您期望得到什么。当我编译并运行您的程序时,它似乎像我预期的那样工作。对我来说,工作完全符合预期,当我输入“1”时进入案例1,当我输入“2”时进入案例2。我使用gcc尝试了您的代码。当输入2作为输入时,它工作正常。这是我得到的输出:输入你的选择2当chice为2时,它会混淆每件事都是OK输入你的选择3否,扫描线会将例如“1”转换为数字1。
void display()
{
    printf("every thing is ok");
}
void main()
{
    int ch;
    while(1)
    {
        printf("enter your choice");
        scanf("%d",&ch);
        switch(ch)

        {
            case 1: clrscr();printf("when choice is one every thing is fine");
                    display();
                    break;
            case 2: clrscr();printf("when chice is two its confusing");
                    display();
                    break;
            case 3: exit(0);
            default: printf("enter choice as 1 or 2 or to exit enter 3");
        }
    }
}