Zweifache for-Schleife abbrechen
-
Hi
ich habe eine ganz primitive Frage:Ich benutze eine doppelte for-Schleife, um die entsprechende Adresse mit den Sender zu vergleich:
int spalte,zeile; bool temp=true; for(spalte=1;spalte<Form1->n+1 && temp;spalte++) for(zeile=1;zeile<Form1->n+1;zeile++) if(clicked==image[spalte][zeile]){temp=false;break;}
Um auch die äußere Schleife zu unterbrechen, habe ich eine bool Variable erstellt. Aber irgendwie kommt mir das nicht sehr sauber vor.
Also wollte ich fragen, ob es eine elegantere Möglichkeit gibt dieses Problem zu lösen?
Danke
-
Naja, du kannst goto nehmen um aus der inneren Schleife zu springen. Ist auch nicht besonders schön, aber in meinen Augen wird deutlicher was du machen willst als durch ein weiteres Flag. Wenn der Code in eine Funktion ausgelagert werden kann, dann mache das und gehe mit einem return raus.
-
du könntest auch standardalgorithmen nehmen, z.b. die innere schleife durch find ersetzen
-
oder du machst aus den beiden schleifen eine...
-
Windalf schrieb:
oder du machst aus den beiden schleifen eine...
wie sollte das aussehen ohne image zu verändern?
-
camper schrieb:
du könntest auch standardalgorithmen nehmen, z.b. die innere schleife durch find ersetzen
Welche Standardalgorithmen gibt es, um Adressen zu vergleich?
Oder habe ich dich falsch verstanden? /Edit: Habe wohl etwas übersehenAlso ich habe es erstmal mit goto gelöst, auch wenn ich es eigentlich nicht mag, aber es ist noch eleganter als mit der temporären Boolean-Variable.
Würde mich trotzdem über weitere Vorschläge freue.
-
ungetestet
for(spalte=zeile=1;spalte<Form1->n+1;++spalte,zeile==n?zeile=1:++zeile) if(clicked==image[spalte][zeile])break;
-
oh gott, bloß nicht!
mit return rausspringen, wie waldi schrieb, ist am besten.
bzw. standard-find nehmen oder ein eigenes schreiben.
-
oh gott, bloß nicht!
hey er hat gefragt. Ich habe nicht gesagt das ich diese Lösung bevorzuge
(höchstens wenn ich mit interpreter und rackwitz um den kürzesten Code kämpfe
)
-
Mit kleinen Abänderungen funktioniert es:
for(spalte=zeile=1;spalte<Form1->n+1&&zeile<Form1->n+1;zeile==Form1->n?spalte++:0,zeile==Form1->n?zeile=1:zeile++) if(clicked==image[spalte][zeile])break;
Ok dankeschön. Die Frage ist bloß ob es sich lohnt für den Nutzen einen so großen Aufwand zu betreiben, aber wieso eigentlich nicht?
Grüße
-
Windalf schrieb:
ungetestet
for(spalte=zeile=1;spalte<Form1->n+1;++spalte,zeile==n?zeile=1:++zeile) if(clicked==image[spalte][zeile])break;
ja, sowas hab ich mir auch geacht ... aber fragen muss eben auch bestraft werden
-
DrGreenthumb schrieb:
oh gott, bloß nicht!
mit return rausspringen, wie waldi schrieb, ist am besten.
Waldi? Ich bin doch kein Hund! *kläff*
-
oh, naja, hätte ja von Waldemar kommen können
Windalf schrieb:
oh gott, bloß nicht!
hey er hat gefragt. Ich habe nicht gesagt das ich diese Lösung bevorzuge
)
ja, dachte ich mir schon. Wollts nur deutlich machen bevor der blödsinn übernommen wird