Nur zahlen eingaben in der Console zulassen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Nur zahlen eingaben in der Console zulassen

    Hey leute

    Ich habe das folgende Problem:

    Ich habe mich heut mal aus Fun an ein Schere,Stein,Papier Spiel drangesetzt. (und es funktioniert auch)

    Jetzt habe ich das Problem das wenn jemand bei der ersten Eingabe also der Auswahl zwischen Schere Stein Papier ( Wobei 1 für Schere,2 für Papier und 3 für Stein Steht ) einen Buchstaben eingibt mir das ganze abschmiert weil es durch

    VB.NET-Quellcode

    1. var1 = Cint(Console.Readline())


    in Integer Konvertiert wird.

    Wie kann ich das lösen ? Also damit meine ich das keine Buchstaben eingegeben werden können.

    (Übrigens bei den anderen abfragen habe ich es mit do until Var3 = true loop und boolean auf true or false gelöst was aber bei dieser leider var leider nicht möglich ist.)
    Hab mal nen expander drumrum gepackt (spoiler)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim output As Integer
    2. While output < 1 OrElse output > 3
    3. Console.WriteLine("Bitte Zahl zwischen 1 und 3 eingeben:")
    4. Integer.TryParse(Console.ReadLine(), output)
    5. End While
    6. Select Case output
    7. Case 1
    8. 'Schere
    9. Case 2
    10. 'Stein
    11. Case 3
    12. 'Papier
    13. Case Else
    14. 'Schachmatt
    15. End Select

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

    Ja weil wegen Baum haha :D

    ich sag doch ich bin noch Anfänger und ich weiss das ich den sowieso nochmal umschreiben muss aber ich will es erstmal zum laufen bringen (möglichst bug frei)
    und dann nochmal an einigen stellen (wo es mir selbst nicht gefällt) den code umschreiben (auf eine möglichst kurze variante).

    Also Kurz: das was ich fabriziert habe ist erstmal ein Spaghetti Code und das weiß ich auch ^^
    Gibt glaube ich irgendwo IsNumeric.
    Greets
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Gibts den überhaupt keine möglichkeit zu sagen:

    Wenn ein String eingegeben wurde Console.Writeline("Ne geht nicht") mach die schleife nochmal (uns war solange bis eine zahl von 1 - 3 eingegeben wurde ?

    Also irgentwie sowas wie:


    If Var1 = String then
    Console.Writeline ...
    Else

    bla bla

    End If

    (wobei der halt String nur als Datensatz Deklaration versteht)
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    hab ich schon aber leider passt das nicht rein weil ich durch WHILE die hauptschleife des spiels ersetzen müsste.

    Die IsNumeric variante klingt mir da doch viel sinnvoller wobei ich da allerdings keine ahnung habe wie ichs auf die console anwenden soll weil es im internet nur bei textboxen gemacht wird :/

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

    Also, vielleicht kannste hiervon etwas lernen, hab mal nen kleines Papier-Stein-Schere Konsolengame gemacht:
    Weil dein Gefrickel da, ist bisschen unübersichtlich.

    Wenn du Fragen zu iwas hast, kannste fragen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Module Module1
    3. Private Enum Element
    4. Schere = 1
    5. Stein = 2
    6. Papier = 3
    7. End Enum
    8. Private rnd As New Random()
    9. Sub Main()
    10. Console.WriteLine("Schere, Stein, Papier")
    11. Console.WriteLine("Viel Spaß!")
    12. Console.WriteLine("-------------------------------------")
    13. Console.WriteLine("Du spielst nun gegen eine KI")
    14. Do
    15. Dim output As Integer = 0
    16. While output < 1 OrElse output > 3
    17. Console.WriteLine("Bitte Schere(1), Stein(2), oder Papier(3) auswaehlen!:")
    18. Integer.TryParse(Console.ReadLine(), output)
    19. End While
    20. Dim compElement As Element = CType(rnd.Next(1, 4), Element)
    21. Dim userElement As Element = CType(output, Element)
    22. Dim compName = [Enum].GetName(GetType(Element), compElement)
    23. Dim userName = [Enum].GetName(GetType(Element), userElement)
    24. Console.WriteLine("Der Computer hat {0} gewählt", compName)
    25. If compName = userName Then
    26. Console.WriteLine("Unentschieden! Ihr habt beide {0}", userName)
    27. ElseIf getWinner(userElement, compElement) Then
    28. Console.WriteLine("{0} (Du) schlägt {1} (Computer)", userName, compName)
    29. Else
    30. Console.WriteLine("{0} (Computer) schlägt {1} (Du)", compName, userName)
    31. End If
    32. Loop
    33. End Sub
    34. Private Function GetWinner(ByVal player As Element, ByVal comp As Element) As Boolean
    35. Return Not player Mod 3 + 1 = comp
    36. End Function
    37. End Module
    Das ist zu Overkill für mich hehe ^^


    Verstehen tue ich ja was du da geschrieben hast aber ich selbst bin wie schon gesagt noch Anfänger und Programmiere mit VB erst seit einem Jahr.

    Aber an sich wollte ich es halt an meinem code lösen.

    Egal fürs erste lass ich es mal so anscheinend fehlt mir da einiges an Erfahrung mit VB


    Trotzdem danke für die Hilfe :)
    Eigentlich ist das nicht besonders schwer, wenn mans einmal kann.
    Du musst alle Aufgaben, die du für ein Schere-Stein-Papier Spiel benötigst in weitere Teilaufgaben einteilen.

    In meinem Beispiel sind's folgende Teilaufgaben:

    -Begrüßung
    -Eingabe des Benutzers abfragen/filtern und speichern
    -Computereingabe generieren und speichern
    -Beide Eingaben vergleichen und basierend darauf eine Ausgabe generieren

    die letzten 3 Punkte kommen dann in eine Do Loop schleife und fertig.


    Die Funktion von mir hat dich vllt etwas verwirrt, ich hab aber Schere, Stein und Papier absichtlich in dieser Reihenfolge aufgestellt, weil jedes Element, von einem Element, dass eins höher ist, geschlagen wird (also: Schere wird von Stein geschlagen, Stein von Papier und Papier von Schere), das Mod 3 ist dafür weil's ja kein 4tes Element gibt, wird das 3te Element einfach zum 0ten Element und das eine obere Element davon ist dann Schere.


    Bei deinem Code konnte man sowas nicht wirklich erkennen, also war keine Struktur da drinne.

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

    bozzkurt10 schrieb:

    weil ich durch WHILE die hauptschleife des spiels ersetzen müsste.
    Lass die Console, nimm WinForm, wenn nicht gar WPF.
    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!