Wie zu brechen eine unendliche for (;;) - Schleife in C?
Ich habe eine wichtige unendliche for-Schleife, die ermöglicht, einen sensor zu halten an der Aktualisierung der Werte. Aber ich möchte zu brechen, die for-Schleife, wenn ein anderer sensor bringt neue Werte. Wie kann ich wechseln von einer unendlichen for-Schleife zu einem anderen?
Aktuelle code:
for(;;){
SON_Start();
//Wait 65ms for max range time
delay10ms(7);
//Read Range
i = SON_Read(SON_ADDRESSES[sonarReading]);
//pause
delayMs(100);
if(i<15)
drive(200, RadCW);
}
Was ich hinzufügen möchte:
Wenn Sensor2
gibt eine Lesung (z.B. Sensor2 > 20
), dann möchte ich, die Schleife zu brechen, und gehe zu einem anderen unendlichen for-Schleife zu beginnen, eine neue Funktion.
Bitte schließen Sie nicht diese Frage, Leute. Und, in Zukunft, wenn Sie diese Art von situation auftauchen, wieder Flagge für moderator Aufmerksamkeit. Wir bevorzugen, um zu versuchen und zu retten, eine situation, anstatt repost Fragen.
InformationsquelleAutor NLed | 2012-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf der Suche für "Umschalten zwischen 2 Endlosschleifen", könnte es sein, "verpackt" durch die Dritte Schleife und diese "Umschaltung" erfolgt durch einfache
break
.Aber da Sie Ihr Programm zu stoppen einige Tage, diese Schleife gelegt werden kann, innerhalb dessen die Funktion und könnten Sie
return;
für Sie enden:Und irgendwo rufen Sie einfach:
Hoffe, das hilft.
Ich aktualisiert meine Antwort. Sollte klar sein jetzt.
Danke!!! Die
I should stop
wenn-Anweisung einen Wert zurückgeben, dieser Wert kann verwendet werden, zum beenden der Schleife verwendet oder in anderer if-Anweisungen ?Funktion
myMagicLoop
könnte wieder etwas Wert ist, dann ersetzen Siereturn;
durchreturn value;
und ja, Sie wäre in der Lage, verwenden Sie diesen Wert im code, wo Sie diese Funktion aufrufen:value = myMagicLoop(); if (value...) ...
. Wenn es ist, was Sie Fragen.Es gibt viele Menschen, die denken, dass mit
goto
"akzeptabel" und es gibt auch viele Leute, die eher ändern Sie Ihren code, um zu vermeiden, es zu benutzen. Können sagen, ich gehöre zu der zweiten Gruppe.InformationsquelleAutor LihO
Wechselt zwischen loop A und loop-B.
InformationsquelleAutor Joe
Verwenden Sie
break;
zu brechen, eine Schleife und die Kontrolle über seine schließende Klammer. Zum BeispielInformationsquelleAutor sharptooth
Den "Pause" - Befehl sollte das tun, was Sie brauchen?
InformationsquelleAutor FreudianSlip
Alternativ könntest du überlegen, umschreiben diese mit einer event-driven-Ansatz. Dies wird natürlich davon abhängen, was Ihre hardware in der Lage ist, aber zumindest sollten Sie in der Lage zu produzieren timer-Ereignisse.
Dann würde der code wie folgt Aussehen:
(Bevor ich auf die volatile-Variablen bitte beachten Sie, dass volatile ist es, zu verhindern, dass gefährliche compiler-Optimierungen und nicht zu dienen, wie einige mutex guard/atomic access/memory-Barriere, etc.)
upvote für einen anderen Ansatz als die Pause 😉
InformationsquelleAutor Lundin
Der beste Weg, dies zu tun, ist zu ändern Sie die
for
- Anweisung so etwas wie:Alternativ können Sie es ändern, von einem
for
zu einemwhile
Aussage:Wenn das nicht suite Ihre Bedürfnisse, können Sie immer mit einem
break
statt.InformationsquelleAutor onemasse
Weitere option könnte sein, die Signale (SIGUSR1,SIGUSR2) zum Umschalten von einer Schleife zur anderen.
Etwas von dieser Art:
InformationsquelleAutor user138645