Ist diese Variante besser als Goto ?

  • C#

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von darby.

    Ist diese Variante besser als Goto ?

    Edit: Habe einige Fehler Text bearbeitet.

    Hallo!
    Das hier ist mein erster Post in diesem Forum und daher bin ich mir nicht ganz sicher ob das hier reingehört :/

    Mein Problem ist folgendes:

    Ich schreibe ein Programm (Eine Konsolenanwendung) wo man aufgefordert wird 2 Zahlen einzutippen. Die Zahlen kann der Benutzer sich selber heraussuchen.
    Nun ist mein Problem, das ich es gerne so haben möchte, dass wenn der Benutzer eine negative Zahl eingibt oder die erste Zahl größer als die Zweite ist, dass man dann wieder an den Punkt kommt wo man aufgefordert wird die 2 Zahlen einzutippen.

    Hier ist mein bisheriger Code (Hab noch nicht so viel Ahnung von C#):

    C#-Quellcode

    1. public static int ErsteZahl = 0;
    2. public static int ZweiteZahl = 0;
    3. public static void EigeneZahlenAbfrage()
    4. {
    5. /* Konsole leeren */
    6. Console.Clear();
    7. /* Beide Zahlen abfragen */
    8. Console.WriteLine("Bitte zwei Zahlen eingeben");
    9. /* Try-Catch Block -> Hier wird vermieden, dass das Programm abstürtzt bei einem Fehler */
    10. try
    11. {
    12. /* Beide Zahlen in einen Integer Konvertieren */
    13. ErsteZahl = Convert.ToInt32(Console.ReadLine());
    14. ZweiteZahl = Convert.ToInt32(Console.ReadLine());
    15. }
    16. /* Wenn keine Zahl eingegeben wurde stoppt das Programm und es wird eine Nachricht ausgegeben */
    17. catch
    18. {
    19. Console.ForegroundColor = ConsoleColor.Red;
    20. Console.WriteLine("Falsches Format! Es sind nur Zahlen erlaubt!");
    21. Console.ReadKey();
    22. Console.ForegroundColor = ConsoleColor.Gray;
    23. Console.Clear();
    24. EigeneZahlenAbfrage();
    25. }
    26. if (ErsteZahl > ZweiteZahl)
    27. {
    28. Console.ForegroundColor = ConsoleColor.Red;
    29. Console.WriteLine("Fehler: Die erste Zahl darf nicht größer sein als die Zweite!");
    30. Console.ReadKey();
    31. Console.ForegroundColor = ConsoleColor.Gray;
    32. EigeneZahlenAbfrage();
    33. }
    34. else if ((ErsteZahl < 0) || (ZweiteZahl < 0))
    35. {
    36. Console.ForegroundColor = ConsoleColor.Red;
    37. Console.WriteLine("Fehler: Die Zahlen dürfen sich nicht im negativ Bereich befinden!");
    38. Console.ReadKey();
    39. Console.ForegroundColor = ConsoleColor.Gray;
    40. EigeneZahlenAbfrage();
    41. }
    42. }
    @EaranMaleasi

    do-while hatte ich schon benutzt nur kam ich jedes mal wenn ich die beiden Zahlen eingetippt habe,
    obwohl sie nicht im negativen Bereich waren oder die Erste Zahl größer als die Zweite wieder an dem Punkt raus wo ich aufgefordert wurde 2 Zahlen einzutippen :/

    Hier ist der do-while Code den ich hatte:

    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 ConsoleApplication3
    7. {
    8. class Program
    9. {
    10. static int ErsteZahl;
    11. static int ZweiteZahl;
    12. static void Main()
    13. {
    14. do
    15. {
    16. /* Konsole leeren */
    17. Console.Clear();
    18. /* Beide Zahlen abfragen */
    19. Console.WriteLine("Bitte zwei Zahlen eingeben");
    20. /* Try-Catch Block -> Hier wird vermieden, dass das Programm abstürtzt bei einem Fehler */
    21. try
    22. {
    23. /* Beide Zahlen in einen Integer Konvertieren */
    24. ErsteZahl = Convert.ToInt32(Console.ReadLine());
    25. ZweiteZahl = Convert.ToInt32(Console.ReadLine());
    26. }
    27. /* Wenn keine Zahl eingegeben wurde stoppt das Programm und es wird eine Nachricht ausgegeben */
    28. catch
    29. {
    30. Console.ForegroundColor = ConsoleColor.Red;
    31. Console.WriteLine("Falsches Format! Es sind nur Zahlen erlaubt!");
    32. Console.ReadKey();
    33. Console.ForegroundColor = ConsoleColor.Gray;
    34. Console.Clear();
    35. }
    36. }
    37. while ((ErsteZahl > ZweiteZahl) || (ErsteZahl < 0) || ZweiteZahl < 0);
    38. Main();
    39. }
    40. }
    41. }


    Habe absolut keine Ahnung grade wie ich die do-while umschreiben müsste damit das Funktioniert :/
    probierma

    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 ConsoleApplication3
    7. {
    8. class Program
    9. {
    10. static int ErsteZahl;
    11. static int ZweiteZahl;
    12. static void Main()
    13. {
    14. do
    15. {
    16. /* Konsole leeren */
    17. Console.Clear();
    18. /* Beide Zahlen abfragen */
    19. Console.WriteLine("Bitte zwei Zahlen eingeben");
    20. /* Try-Catch Block -> Hier wird vermieden, dass das Programm abstürtzt bei einem Fehler */
    21. try
    22. {
    23. /* Beide Zahlen in einen Integer Konvertieren */
    24. ErsteZahl = Convert.ToInt32(Console.ReadLine());
    25. ZweiteZahl = Convert.ToInt32(Console.ReadLine());
    26. }
    27. /* Wenn keine Zahl eingegeben wurde stoppt das Programm und es wird eine Nachricht ausgegeben */
    28. catch
    29. {
    30. Console.ForegroundColor = ConsoleColor.Red;
    31. Console.WriteLine("Falsches Format! Es sind nur Zahlen erlaubt!");
    32. Console.ReadKey();
    33. Console.ForegroundColor = ConsoleColor.Gray;
    34. continue;
    35. }
    36. }
    37. while ((ErsteZahl > ZweiteZahl) || (ErsteZahl < 0) || ZweiteZahl < 0);
    38. }
    39. }
    40. }