Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/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 如果条件通过开关和goto超越_C - Fatal编程技术网

C 如果条件通过开关和goto超越

C 如果条件通过开关和goto超越,c,C,在下面的代码中,if条件被goto语句覆盖,在随后的代码中,开关中的if条件也被覆盖。请解释为什么goto和switch会这样做,以及是否有办法在goto和switch内部设置条件 int main() { int x=3; goto LABEL; if(x < 0) { LABEL: printf("Label executed"); } printf("\nEND MAIN"); return 0; } 输出:

在下面的代码中,
if
条件被
goto
语句覆盖,在随后的代码中,
开关中的
if
条件也被覆盖。请解释为什么
goto
switch
会这样做,以及是否有办法在
goto
switch
内部设置条件

int main()
{
    int x=3;
    goto LABEL;

    if(x < 0) {
        LABEL: printf("Label executed");
    }

    printf("\nEND MAIN");
    return 0; 
}

输出:

Label executed
END MAIN
case 2
跳到此行:

LABEL: printf("Label executed");
忽略if语句及其条件,这将解释输出


switch/case
只是一个花哨的
goto
,因此
switch(x)
,如果
x=2
,将转到案例2,忽略解释输出的if语句



PS:goto可能会产生意大利面代码,因此被认为是编程的害群之马。建议不要使用它,除非你真的必须这样做。阅读

中的更多内容请阅读a以了解gotoMaybe等基本概念。如果您想离开1960ies/70ies,学习结构化编程。意大利面条放在盘子里加上好的酱汁就可以了,但在编程中就不行了。C提供循环语句以避免编写如此糟糕的代码。基本上这是对goto的滥用。虽然C有解决问题的规则,但除了编译器编写者或困惑的C竞赛参赛者之外,它们对任何人都无关紧要。不要跳入if块或将if块放入开关盒中。这一切归结为:请不要从外部来源随机获取一段代码,并要求stackoverflow为您解释它。取而代之的是,从有解释的例子中学习,这样你就可以自己理解它们。一旦你学会了基础知识,你可以在这里问一些具体的问题,但请一次问一个问题,而不是一次问多个问题。@cdarke:是的,我在80年代也用过它,在Apple BASIC和VIC64上也用过它,但主要是在我的汇编代码中(以跳转/分支指令的形式)。但我想你明白我的意思了:-)。谢谢你,阿马拉斯!所以我的观点是,有没有任何方法可以对goto@VishalRana-No.@VishalRana条件分支在C中称为
if-else
语句,尽管C没有等价于汇编程序条件分支的语句。没有理由使用
goto
。它几乎没有什么有效的用途,而且这些案例可以用更好的方式重写。多亏了@storyTellertoo@VishalRana很高兴其他用户在我吃午饭时帮助了你!=)既然你觉得这个答案很有帮助,我认为你应该接受它。
LABEL: printf("Label executed");