C# Kleines IF-Anweisung Problem

  • C#

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

    C# Kleines IF-Anweisung Problem

    Moin Leute,

    hab mal wieder ein kleines Problem bei dem ich nicht weiterkomme. Habe kürzlich angefangen C# zu lernen und wollte ein kleines Konsolenabfrage-Spiel programmieren, ganz einfach.
    Zunächst Die Grundidee: Das Programm generiert eine zufällige Zahl. Diese wird auf der Konsole allerdings nicht angezeigt. Als nächstes fordert mich die Konsole auf die Zahl herauszufinden, indem
    ich einfach Zahlen in die Konsole eingebe. Ist die von mir eingegebene Zahl kleiner als die gesuchte Zahl soll mir dies durch die Konsole durch einen Text oder ein einfaches ">" angezeigt werden. Ist sie
    größer soll dies durch ein einfaches "<" angezeigt werden. Solange, bis ich die korrekte Zahl eingegeben habe.

    Das Problem:

    Bei der if-Anweisung meckert er rum, dass ich offensichtlich nicht einen String und einen Integer Wert durch ein ">" unterscheiden kann. Ich weiß allerdings nicht wie ich das Problem löse.
    Vielleicht hat jemand von euch einen Tipp oder Alternativen. Mir geht es darum die Funktionsweise zu verstehen, also wären ein paar Anmerkungen hilfreich :)

    hier der Code:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace Zahlenrategedöns
    7. {
    8. class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. Console.WriteLine("Errate die gesuchte Zahl!");
    13. Random Rnd = new Random(); // initialisiert die Zufallszahl
    14. int RndNr1 = Rnd.Next();
    15. string Zahl = RndNr1.ToString();
    16. string result = Console.ReadLine();
    17. Console.WriteLine("Tippe eine Zahl ein");
    18. do
    19. {
    20. Console.ReadLine() ;
    21. }
    22. while (result != Zahl);
    23. Console.WriteLine("nope");
    24. Console.WriteLine(Zahl);
    25.  
    26. Console.ReadLine();
    27.  
    28. if (result > Zahl)
    29. {
    30. Console.WriteLine("<");
    31. }
    32. else if (Console.ReadLine() < Zahl)
    33. {
    34. Console.WriteLine(">");
    35. }
    36. else
    37. {
    38. Console.WriteLine("Jawoll!!");
    39. }
    40.  
    41.  
    42. }
    43. }
    44. }


    ~blaze~: Thema verschoben

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

    @NixChecker Du liest einen String ein.
    Konvertiere ihn in einen numerischen Wert, dann kannst Du ihn auch vergleichen.

    C#-Quellcode

    1. string txt = Console.ReadLine();
    2. int val = int.Parse(txt);
    Das knallt natürlich, wenn Du "Roulade mit Klößen" eingibst.
    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!
    Hi
    du wirst vmtl. auf ein paar Logikfehler treffen (schau' dir mal nochmal die Do-While-Schleife an).

    Was du verwenden solltest, ist int.TryParse:

    C#-Quellcode

    1. int result;
    2. string input;
    3. if (int.TryParse(input, out result))
    4. {
    5. Console.WriteLine(result.ToString() + " wurde eingegeben.");
    6. }
    7. else
    8. Console.WriteLine("Ein ungültiger Wert wurde eingegeben.");


    Edit: Zu spät, aber ich halte TryParse für die bessere Wahl, da das Programm nicht abstürzt.

    Viele Grüße
    ~blaze~
    Danke ersteinmal für die schnelle Antwort,

    leider funktioniert es immernoch nicht. habe den Code angepasst wie @RodFromGermany es vorgeschlagen hat. Er sagt immernoch, dass der ">" oder "<"-Operator nicht vom
    Typ "integer" oder "string" angewandt werden kann.

    Die Lösung von @~blaze~ kann ich nicht nachvollziehen. Ist damit denn noch die Funktion gewährleistet? Ich wollte ja eine 'wenn eingegebene Zahl größer/kleiner als Random Zahl
    dann Nachricht, ansonsten (falls man genau die richtige Zahl eintippt) eine kleine Erfolgsnachricht.

    vielleicht habe ich auch irgendwo etwas vergessen:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace Zahlenrategedöns
    7. {
    8. class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. Console.WriteLine("Errate die gesuchte Zahl!");
    13. Random Rnd = new Random(); // initialisiert die Zufallszahl
    14. int RndNr1 = Rnd.Next();
    15. string Zahl = RndNr1.ToString();
    16. string result = Console.ReadLine();
    17. int val = int.Parse(result);
    18. Console.WriteLine("Tippe eine Zahl ein");
    19. do
    20. {
    21. Console.ReadLine() ;
    22. }
    23. while (result != Zahl);
    24. Console.WriteLine("nope");
    25. Console.WriteLine(Zahl);
    26.  
    27. Console.ReadLine();
    28.  
    29. if (val > Zahl)
    30. {
    31. Console.WriteLine("<");
    32. }
    33. else if (val < Zahl)
    34. {
    35. Console.WriteLine(">");
    36. }
    37. else
    38. {
    39. Console.WriteLine("Jawoll!!");
    40. }
    41.  
    42.  
    43. }
    44. }
    45. }

    NixChecker schrieb:

    C#-Quellcode

    1. while (result != Zahl);
    Vergleiche bitte Zahl mit Zahl!
    resultat ist ein string.

    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!
    Der Plan deiner Anwendung ist ja folgender:

    - Erzeuge eine Zufallszahl

    -- Lies Benutzereingabe ein
    -- Konvertiere zu Zahl
    -- Vergleiche Zahl mit Zufallszahl und gib entsprechende Meldungen aus
    - Wiederhole, falls Zahl nicht gewünschtes Ergebnis

    - Beende das Programm/Starte von Vorne/...


    int.TryParse gibt dir ein Boolean zurück, ob die Eingabe konvertiert werden konnte. Der zweite Parameter gibt durch das out zusätzlich an, wo das Ergebnis des Konvertierungsvorgangs abgelegt werden soll.

    Vielleicht ist ein Beispiel hilfreich:
    Strings können alle möglichen Texte sein "123" ist eine gültige Zahl "12345678901234567890" ist zwar eine gültige Zahl, kann aber nicht in int dargestellt werden, da sie zu groß ist, "Hallo" ist keine gültige Zahl.
    Bei RodFromGermanys Code würde das Programm abstürzen, sofern du keine weiteren Maßnahmen gegen ungültige Eingaben ergreifst, bei TryParse nicht, da im Rückgabewert angegeben wird, ob die Konvertierung erfolgreich war. Das Ergebnis wird dann an den out-Parameter ausgegeben, der quasi wie eine Art zweiter Rückgabewert fungiert.

    Viele Grüße
    ~blaze~