user-0 提问: 死循环中如何跳出stitch

回复:
user: user-1
content: PHP中可以用 break n跳出n重循环，但是C++貌似没有这种语法。

user: user-2
content: java、javascript、python、php、pascal、c#、……能做到类似6楼代码的功能吗？

user: user-2
content: 引用 12 楼 wzxq123 的回复:PHP中可以用 break n跳出n重循环，但是C++貌似没有这种语法。 6楼代码演示的不是多重循环，是多层函数调用。 C++版，请欣赏：#include <iostream> using namespace std; struct MyStruct {     int Nodedata;     MyStruct *pLeft;     MyStruct *pRight; } s1,s2,s3,s4,s5,s6,s7,s8; void ashow(MyStruct * p) {     if (p != nullptr) {         ashow(p->pLeft);         ashow(p->pRight);         cout << p->Nodedata << endl;         if (p->Nodedata == 4) {             throw 1;//退出递归.直接返回.         }     } } int main() {     MyStruct *pRoot;//根      pRoot = &s1;     s1.Nodedata = 1;     s2.Nodedata = 2;     s3.Nodedata = 3;     s4.Nodedata = 4;     s5.Nodedata = 5;     s6.Nodedata = 6;     s7.Nodedata = 7;     s8.Nodedata = 8;      s1.pLeft = &s2;     s1.pRight = &s3;      s2.pLeft = &s4;     s2.pRight = &s5;      s3.pLeft = &s6;     s3.pRight = &s7;     try {         ashow(pRoot);     } catch (int err) {         cout<<"catch err "<<err<<endl;     }     return 0; } //4 //catch err 1 //

user: user-3
content: 让你输入case的值，你输个0加回车就退了呀

user: user-4
content: 用goto吧，或者在每次循环最后用个变量判断是否退出循环，而这个变量在switch中根据不同要求进行变化

user: user-5
content: 在switch外面,判断输入的sel,然后break;如果在switch中可以考虑使用flag, 在switch外面判断flag退出,或者使用goto但不建议使用最后一个~

user: user-6
content: 引用 6 楼 zhao4zhong1 的回复:需要我在这里炫一下怎么退出多层函数吗？ #include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  不需要吗？

user: user-6
content: goto 或者设置标志吧 这是C 语言设置的一个小小缺陷  switch 和 循环嵌套，谁在内部，break 的目标就是谁的外部 break,goto,return，continue 都属于 直接跳转类关键字 if,switch  属于条件跳转 函数调用也是跳转 循环也是条件跳转  switch 内部的break 不能跳出循环 反之循环内部的break 也不能跳出 switch

user: user-2
content: 需要我在这里炫一下怎么退出多层函数吗？ #include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  不需要吗？

user: user-7
content: 楼主 你标题里的 switch  你拼写错了！

user: user-8
content: 方法太多了，最通用的就是设一个标志变量f，default设置f=0，while里判断f==0就break

user: user-9
content: default处将sel赋值为0

user: user-10
content: 退出多层循环可以采用这样的形式或goto  for(int i=0;i<100;i++) {     for(int k=0;k<100;k++)     {         if(i+k>100 && k<30)         {             cout<<i<<" "<<k<<endl;             i=k=200;//退出多层循环可以采用这样的形式或goto         }     } }