2017-03-07 1 views
-1

Ich habe eine einfache for-Schleife innerhalb einer Funktion.Finden Sie heraus, ob ein für nicht gebrochen hat

void Func(void) 
{ 
    for (int i = 0; i < 1; ++i) 
    { 
     break; 
    } 
    if (/*for is not broken*/) 
    { 
    } 
} 

Was soll ich statt schreiben: "gebrochen/* für nicht * /"?

Ich möchte nicht außerhalb der Schleife zu definieren.

Ich möchte keine andere Variable außerhalb der Schleife definieren.

Antwort

0

Die offensichtlichste Antwort ist Ihr Code innerhalb der Schleife durchzuführen, und dann zu brechen, was in Ihrem triviales Beispiel würde nur wie folgt aussehen:

void Func(void) 
{ 
    for (int i = 0; i < 1; ++i) 
    { 
     { 
      /* other stuff */ 
      break; 
     } 
    } 
} 

Normalerweise dieses Problem tritt auf, wenn Sie wollen, etwas anderes außerhalb der Schleife, wenn Sie nicht brechen, was normalerweise bedeutet, dass die Schleifenvariable außerhalb der Schleife definiert wird. Das ist ein wenig unordentlich, aber wenn Sie die Schleife in eine Funktion setzen und true/false zurückgeben (ich bevorzuge eine enum hier, da ich persönlich die wahren/falschen Rückgabewerte nicht mag, es sei denn, es ist klar aus dem Funktionsnamen, was sie wirklich bedeuten).

+0

Eigentlich musste ich etwas machen, wenn nicht kaputt ging. Ihre Antwort (mit einer Funktion) macht genau das, was ich brauche. –

+0

Bitte akzeptieren Sie die Antwort, wenn es Ihnen gibt, was Sie wollen, und natürlich, wenn Sie tatsächlich etwas benötigt, um zu passieren, wenn die Schleife nicht unterbrochen wurde, sollten Sie das wahrscheinlich in Ihre Frage gestellt haben. –

4

Sie können nicht, ohne eine zusätzliche Variable, da es keine Variable im Bereich der if-Anweisung in Ihrem Code gibt, die Sie testen könnten.

0

Normalerweise verwenden Sie eine Variable:

bool didBreak = false; 
for (int i = 0; i < 1; ++i) 
{ 
    didBreak = true; 
    break; 
} 
if (didBreak) 
{ 
} 

Der Versuch, diese einfache Lösung für die unerfindlichen Gründen zu vermeiden, macht die Sie erwähnt nur das Leben schwerer.

4

Ich finde Ihre Zwänge sehr seltsam:

  • Ich will nicht i außerhalb der Schleife definieren.
  • Ich möchte keine andere Variable außerhalb der Schleife definieren.

Gründe dafür? Es ist normal, hierfür eine Variable zu verwenden. Bei Code geht es um Lesbarkeit, nicht um die geringsten Codezeilen.

Aber das einzige, was Sie tun können, ohne eine zusätzliche Variable zu verwenden, ist es in der for-Schleife zu behandeln. Wenn du kurz davor bist zu brechen.

void Func(void) 
{ 
    for (int i = 0; i < 1; ++i) 
    { 
     if (some_condition) 
     { 
      HandleBreakScenario(); 
      break; 
     } 
    } 
} 
+0

Der Grund: Ich benutze dieses Muster innerhalb einer komplizierten Funktion wiederholt und ich versuche zu verhindern, dass weitere Variablen zu meinem Umfang in Funktion hinzugefügt werden. –

+0

Ihre Antwort ist richtig für kaputt, Eigentlich musste ich etwas tun, für das ich nicht kaputt war (Entschuldigung, mein Fehler in Frage, ich habe es bearbeitet.). –

Verwandte Themen