2016-12-08 6 views
1

Wie beende ich den Fall '5', wenn ich den Fall '6' aktiviere? Ich kann einfach nicht aus der Schleife aussteigen. Ich habe versucht, eine Pause zu machen; im Fall '6', aber das schien nicht zu funktionieren.Wie man eine while-Schleife mit dem Schalter C++ beendet

case '5': //receive a '5' from serial com port and execute auto docking 
while(1) 
{ 
north =0; 
south=0; 
east=0; 
west=0; 
scanmovement(); 
for(index=0;index<7;index++) 
    { 
    getdirection(index); 
    } 
    arlomove(); 
    obstacleavoidance(); 

} 
    break; 
case '6': //receive '6' from serial com port and stop auto docking 
//somethingsomething 
//break out of while loop in case '5' when this is activated 
break; 
+0

Bearbeiten Sie Ihren Code, um einen Grund zum Beenden der while-Schleife anzuzeigen, vorzugsweise eine 'if'-Anweisung. – Spencer

+0

Also, um klar zu sein, ist dies multithreaded oder reentrant auf andere Weise (z. B. durch einen Signal-Handler, oder eine der im Fall '5': 'loop) genannten Methoden? Andernfalls erreichen Sie nie 'case' 6 ': 'um die Schleife zu beenden. – ShadowRanger

+0

Ich habe den Code bearbeitet – Marvinatorrr

Antwort

1
switch(var) // your variable 
{ 
case '5': 
while(1) 
{ 
north =0; 
south=0; 
east=0; 
west=0; 
scanmovement(); 
for(index=0;index<7;index++) 
    { 
    getdirection(index); 
    } 
    arlomove(); 
    obstacleavoidance(); 

// var=.... update your var here  
if(var=='6') { // do case 6 stuff 
      break; // break out while when var = 6 
      } 
} 
    break; 
case '6': 
//somethingsomething 
//break out of while loop in case '5' when this is activated 
break; 
} 
1

Sie können hier nicht einfach aufhören ‚5‘, aber sie so etwas tun könnte.

case '5': 
    while(!stop) 
    { 

    } 
    break; 
case '6': 
    //somethingsomething 
    stop = true; 
    break; 
+0

Dies wird nicht funktionieren. 'stop' ist nicht innerhalb der Schleife gesetzt. – Spencer

+0

@Spencer - Ich verstehe nicht, was würde nicht funktionieren? – mayu

+0

Was Sie in Ihrer Antwort vorschlagen, hält die Schleife nicht davon ab, für immer weiterzugehen. – Spencer

0

, wenn es in der Funktion return können Sie einfach, wenn Sie erreichen 5.

Zum Beispiel

void function(int n) { 
    while(1) { 
     switch(n) { 
      case 5: 
       blahblah~~ 
       return; 
     } 
    } 
} 

oder einfach können Sie goto verwenden, wenn es die beste Option ist,

void main() { 
    int n = 5; 
    while(1) { 
     switch(n) { 
      case 5: 
       blahblah~~ 
       goto theEnd; 
     } 
    } 

    theEnd: 
     blahblah~~ 
}