If bei Konsolenanwendungen?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    If bei Konsolenanwendungen?

    Mein Code:

    VB.NET-Quellcode

    1. Module Module1
    2. Dim ergebnis As String
    3. Sub Main()
    4. Console.WriteLine("Überschrift")
    5. ergebnis = Console.ReadLine()
    6. If ergebnis = "" Then
    7. Else
    8. If ergebnis = "help" Then
    9. Console.WriteLine("zeige die Hilfe")
    10. Console.ReadLine()
    11. Else
    12. If ergebnis = "run" Then
    13. Console.WriteLine("run")
    14. Console.ReadLine()
    15. Else
    16. Console.WriteLine("Command not fund!")
    17. Console.ReadLine()
    18. End If
    19. End If
    20. End If
    21. End Sub
    22. End Module


    Wenn ich jetzt "help" eintippe, kommt der Text "zeigt die Hilfe". Aber wenn ich direkt danach etwas anderes eingebe, egal was, z.B. run, schließt sich das Prigramm?
    Warum???

    Danke,
    Hilfe0987
    :thumbup:
    So dürfte es gehen (ACHTUNG: Nicht getestet!)
    Quick and dirty

    VB.NET-Quellcode

    1. Module Module1
    2. Dim ergebnis As String
    3. Sub Main()
    4. menu:
    5. Console.WriteLine("Überschrift")
    6. ergebnis = Console.ReadLine()
    7. If ergebnis = "" Then
    8. Else
    9. If ergebnis = "help" Then
    10. Console.WriteLine("zeige die Hilfe")
    11. goto menu
    12. Else
    13. If ergebnis = "run" Then
    14. Console.WriteLine("run")
    15. goto menu
    16. Else
    17. Console.WriteLine("Command not fund!")
    18. goto menu
    19. End If
    20. End If
    21. End If
    22. goto menu
    23. End Sub
    24. End Module
    Das ist aber wirklich "dirty".
    Lieber so:

    VB.NET-Quellcode

    1. Module Module1
    2. Dim ergebnis As String
    3. Sub Main()
    4. Console.WriteLine("Überschrift")
    5. While True
    6. ergebnis = Console.ReadLine()
    7. Select Case ergebnis
    8. Case "help"
    9. Console.WriteLine("zeige die Hilfe")
    10. Case "run"
    11. Console.WriteLine("run")
    12. Case "exit"
    13. Exit Sub
    14. Case Else
    15. Console.WriteLine("Command not fund!")
    16. End Select
    17. End While
    18. End Sub
    19. End Module
    @Goldwing Studios Das kommte vom TE, nicht von mir 8-) Hab ihm oben ja nur eine schnelle und dreckige Lösung gezeigt ohne seinen Code zu korrigieren. Die Codekorrektur hat Veronesi für den TE ereledigt, indem er das ganze in eine SELECT CASE in einer While Schleife packte.

    v-go schrieb:

    Die Codekorrektur hat Veronesi...
    Gottlob!
    Zur Info an @Hilfe0987: Ein Goto zu verwenden sollte man sich einfach abgewöhnen. Ist ganz generell als schlechter Stil gebrandmarkt, und in 99,9% der Fälle auch zurecht. Also einfach sowas nie machen, ja?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Parmaster schrieb:

    Goto? Echt jetzt? Wo hast du das denn her?

    Die bei MS sollten das wirklich mal raus nehmen und auf Abwärtskompatibilität keine Rücksicht mehr nehmen , das ist noch ein Überbleibsel von 1950.

    Ich hab ja geschrieben, quick and dirty :rolleyes: Funzen tuts trotzdem
    GoTo empfinde ich nicht als

    v-go schrieb:

    quick and dirty
    sondern als eine der Todsünden der "mordernen" Programmierung.

    Jedes Programm damit sollte abschmieren, am besten mit ner dicken Fehlermeldung die dann während der Runtime beim User sagt :
    "Tut uns leid, der Programmierer beherrscht nicht die Entwicklung innerhalb der .NET-Umgebung. Sicherheitshalber wird das Programm beendet."
    Sarkasmus.SwitchOff();
    @EaranMaleasi

    Naja hier kann man schon ein wenig zurück rudern, denn das einzige was passieren kann ist das der Code "unübersichtlich" wird. Das aber meist auch nur für Dritte die den Code lesen. Ein anderes Argument, als das der angeblichen "Unübersichtlichkeit" wird es nie geben ;) By the Way: Wenn es nie wer verwenden würde, würde MS das nicht noch mitziehen.
    @EaranMaleasi
    Yep, das kann schon sein, aber auch nur weil:
    • Sie die "alten Dinger" selbst noch brauchen (betriebssystemintern oder sonstwas) oder
    • Sie jemand anderes noch aktiv braucht oder
    • Alte Komponenten oder alte Software "es" braucht, weil es schon Jahre in Betrieb ist und nicht
      ausgetauscht wird
    [*]
    :whistling:
    Hi
    alte Sourcecodes müssen auch kompilieren. Wenn man etwas aus einer Sprache entfernt, ist dies nicht mehr der Fall.

    VB.NET-Quellcode

    1. Do
    2. Do
    3. Do
    4. Do
    5. Do
    6. 'How to exit do, here?
    7. Loop
    8. Loop
    9. Loop
    10. Loop
    11. Loop
    12. blablabla()

    Hier könnte man GoTo verwenden. Mehr Fälle fallen mir nicht ein. Boolsche Variablen würden in so einem Fall den Code unnötig unübersichtlich gestalten. Generell verunstaltet GoTo den Code aber einfach nur. Es behindert das Nachverfolgen von Codes, etc.

    Viele Grüße
    ~blaze~