Integer bei Konsolenanwendung

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Integer bei Konsolenanwendung

    Hallo,

    komme leider nicht weiter, und muss leider 'ne Anfängerfrage stellen. Ich habe eine Integer-Variable in meiner Konsolenanwendung festgelegt.

    VB.NET-Quellcode

    1. Dim Anzahl As Integer


    Der Wert wird per Eingabe des Anwenders zugewiesen.

    VB.NET-Quellcode

    1. Anzahl = Console.ReadLine


    Es sollen nur Zahlen von 1 bis 5 eingegeben werden.

    VB.NET-Quellcode

    1. If Anzahl > 5 Then
    2. Console.Write(vbNewLine)
    3. Console.Write("Eingabe von 1 bis 5.")
    4. Console.Write(vbNewLine)
    5. GoTo Nochmal
    6. End If


    Nun besteht für den Nutzer allerdings weiterhin die Möglichkeit, eine beliebige Zeichenkette einzugeben, z.B. einfache Buchstaben. In diesem Fall stürzt die Anwendung ab. Mit On Error Resume Next ließe sich zwar ein Absturz vermeiden, das Problem aber nicht lösen. Wie kann ich also, genau wie beim Code oben, die Anwendung zu einer bestimmten Zeile "zurücksetzen", wenn unzulässige Zeichen eingegeben wurden?

    Danke schonmal.

    Gruß
    Hallo, lies lieber einen String ein und versuche mithilfe von int.TryParse zu überprüfen ob es sich wirklich um eine Zahl handelt. Falls ja, musst du noch den Zahlenbereich prüfen. Wenn alles ok ist, dann kannst du normal fort fahren, wenn etwas nicht stimmt, dann musst du die eingabe erneut verlangen.

    ganz einfach so hier:

    VB.NET-Quellcode

    1. Dim input As Integer = 0
    2. Console.WriteLine("Bitte geben Sie eine Zahl zwischen einschließlich 0 und 5 ein.")
    3. While Not Integer.TryParse(Console.ReadLine(), input) OrElse input < 0 OrElse input > 5
    4. Console.WriteLine("Falsche eingabe!")
    5. End While


    In Konsolen von vorn herein irgendwelche Zeichen blockieren ist zwar über Umwege möglich, aber meist wenig Sinnvoll.
    PS: Option Strict On > Damit ginge das problemlose wandeln von Strings in Zahlen schon nicht mehr ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Koopakiller“ ()

    Zu allererst, das

    VB.NET-Quellcode

    1. Anzahl = Console.ReadLine

    ist Option Strict Off, da du einer Zahl einen String zuweist. Würdest du das nicht tun, sondern ordentlich konvertieren, hättest du die Lösung wahrscheinlich auch schon selbst gefunden.
    Wie dem auch sei, es gibt die schöne Funktion Integer.TryParse, mit welcher du prüfen kannst, ob man einen String in Integer konvertieren kann. WEnn du den in eine SChleife packst und solange laufen lässt, bis die Konvertierung erfolgreich war, hast du dein gewünschtes Ergebnis.

    VB.NET-Quellcode

    1. Do Until Integer.TryParse(Console.ReadLine, anzahl) AndAlso anzahl <= 5
    2. Console.WriteLine("Fehlerhafte Eingabe, bitte erneut versuchen.")
    3. Loop

    Mr.Blade schrieb:

    VB.NET-Quellcode

    1. Console.ReadLine
    liefert einen String zurück.
    Gib also Deiner Anwendung ganz schnell Option Strict On.
    Korrigiere die angezeigten Fehler, dann sehen wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schau Dir mal das an:

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. Dim input As Integer = 0
    4. Do
    5. If Integer.TryParse(Console.ReadLine(), input) AndAlso input >= 1 AndAlso input <= 5 Then
    6. Console.WriteLine("Eingabe gültig")
    7. Else
    8. Console.WriteLine("Eingabe ungültig")
    9. End If
    10. Loop
    11. End Sub
    12. End Module


    Befehle wie GOTO und ON ERROR RESUME NEXT streichst Du bitte wieder aus Deinem Wortschatz. Das hat mit VB.Net absolut nichts mehr zu tun. Und mach OPTION STRICT unbedingt auf ON!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Danke, ich habe meinen Code dahingehend optimiert. Wie kann ich Option Strict denn aktivieren um zu prüfen, dass es richtig ist? Gerade Spaceys Signatur entdeckt. :D Und es passt jetzt alles.

    Noch eine Frage:

    Wie lautet denn der "Choice"-Befehl in VB.NET, sodass der Benutzer (y) (n) etc. zur Verfügung hat?

    Gruß
    Option Strict kannst du unter:
    Projekt>Eigenschaften>Kompilieren auf "On" stellen.
    Extras>Optionen dann mach es Standard. Siehe Bild!



    Den Choice Befehl gibt es in VB.NET so nicht.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Artentus schrieb:

    Den wirst du wohl selbst implementieren müssen. Sollte aber kein Ding sein, einfach WriteLine("Möchten sie... [J] Ja [N] Nein") und dann mit ReadLine die Antwort prüfen.

    Danke, so habe ich's auch gemacht.

    @Trade

    Da füge ich noch hinzu, dass die Einstellungen des aktuellen Projektes ebenfalls angepasst werden müssen. Dies sind ja die "Default project settings", aber so hat man's für alle Zeiten richtig. :thumbup:

    Gruß
    @Mr.Blade
    Wie hast du es denn gemacht ? :)
    Hab da mal als ich angefangen hab zu Programmieren mal eine Funktion zu geschrieben, vielleicht hilft die das ja.

    VB.NET-Quellcode

    1. Option Strict On
    2. Module Module1
    3. Sub Main()
    4. If WaitForAnswer("Wollen Sie das Programm beenden ?") = True Then
    5. Environment.Exit(0)
    6. End If
    7. Console.ReadLine()
    8. End Sub
    9. Public Function WaitForAnswer(ByVal s As String) As Boolean
    10. Dim flag As Boolean = False
    11. If s.Length > 0 Then Console.WriteLine(s)
    12. Dim answer As String = Console.ReadLine().ToLower()
    13. If answer.Length > 0 AndAlso answer.Length < 3 Then
    14. If answer.Contains("y") OrElse answer.Contains("(y)") Then : flag = True
    15. ElseIf answer.Contains("n") OrElse answer.Contains("(n)") Then : flag = False
    16. Else : Throw New Exception("Die Antwort ist ungültig")
    17. End If
    18. Else : Throw New Exception("Die Antwort ist ungültig")
    19. End If
    20. Return flag
    21. End Function
    22. End Module


    Edit: In deinem Fall wäre es natürlich blöd eine Exception zu werfen.

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

    answer.Contains("n") OrElse answer.Contains("(n)")
    Ist das Zweite nicht unnötig?, weil das erste schon auf "n" prüft? ;)
    Moderatorin: "Apropo ritzen.." Shin Chan: "hoho sie hat Po ritze gesagt"
    "saying to buy a mac because your anti-virus expired is like saying you're out of condoms so you're just going to go fuck dudes"
    "Wie auch in anderen Threads kann ich leider nichts bieten außer vielleicht spaß beim Skypen aber mehr leider auch nicht." - Sind kinder pornos nicht verboten?