C#: goto - "Unerreichbarer Code"?

4 Antworten

Moin,

was hast du denn noch darüber? Habe eher das Gefühl, dass davor etwas den loop abschneidet. Zum Beispiel ein Return o.ä.

Davon abgesehen, goto ist sehr schlechte Praxis und sollte man vermeiden (nur zur Info :o) ).

(Außerdem funktioniert der if so nicht. Es wird ohne Klammern nur die nächste Anweisung ausgeführt)

//EDIT: ohwehohach hat völlig Recht - der falsche if zerlegt die Schleife, da es niemals zu einer Erhöhung von K kommen kann, da vorher über das Goto aus der Schleife gesprungen wird.

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting

Mehrere Fehler: k darf nur bis < text.length laufen und nicht bis <=, und die beiden Zeilen nach dem if müssen in einen Block. Sonst wird das goto immer ausgeführt.

Aber: Boa, pfui!! Sowas löst man nicht über ein goto!

Hierfür deklariert man index als

int? index = null;

und ändert die Schleife zu

for (int k = 0; k < text.Length; k++)
{
  if (ch.Equals(character))
  {
    index = k;
    break;
  }
}

Und dann macht man

if (index != null)
{
  // Ausgabe
}

PS: Damit Du in der Ausgabe nicht noch das Nullable behandeln musst, kannst Du index auch weiterhin als int aber mit Defaultwert -1 deklarieren. Da Zeichenpositionen niemals negativ sein können, kann auch dies als Indikator dafür genommen werden, ob Du das Zeichen gefunden hast oder nicht.


Dultus, UserMod Light   15.02.2021, 09:46

Allerdings ergäbe die Fehlermeldung so keinen Sinn - "unerreichbarer Code" - davor fehlt noch etwas.

0
ohwehohach  15.02.2021, 09:49
@Dultus, UserMod Light

Doch, denn das k++ wird niemals ausgeführt, da durch das goto sofort aus der Schleife gesprungen wird. Das ist ein bisschen "schwurbelig" vom Compiler, aber im Endeffekt erkennt er, dass niemals das k++ gemacht wird (ich vermute, dass er das intern zu einer while-Schleife umbaut und dann vor dem k++ das goto steht, was dann dazu führt, dass er das so erkennt).

2
ohwehohach  15.02.2021, 09:51
@Dultus, UserMod Light

So vermute ich das. Ansonsten würde es in der Tat keinen Sinn ergeben, die Warnung nur für die k++-Instruktion auszugeben. Sonst müsste ja das komplette for-Statement entsprechend markiert sein.

2

weil das goto nicht im if ist.

Ohne Klammern zählt nur die nächste Anweisung

Dein goto-Statement bewirkt, dass niemals mehr als nur ein Schleifendurchlauf erfolgt. Du musst ein else vor dieses goto schreiben.