2016-10-10 2 views
0

Ich weiß nicht, wie ich den Benutzer bitten kann, eine beliebige Taste zu drücken, wenn er eine ungültige Eingabe eingibt.C# Wie fordere ich den Benutzer auf, eine beliebige Taste zum Beenden zu drücken, wenn er einen ungültigen Eingang eingibt?

Immer wenn ich versuche, Console.ReadKey() zu setzen, läuft das Programm einfach weiter. Ich weiß nicht, wie ich es stoppen kann, wenn der Benutzer keine gültige Eingabe gemacht hat.

Hier ist ein Screenshot enter image description here

Hier ist der Code

/* Variable */ 

     int height = 0;    // stores user's height input 
     int weight = 0;    // stores user's weight input 
     const int factorBMI = 703;  // stores user's constant bmi which is 703 
     double bmi = 0.0;    // stores user's calculated bmi 
     /* User's Input */ 
     Console.WriteLine("************************************************************************************************************************"); 
     Console.WriteLine(" Please enter the person's height in inches:");           // Ask user to enter their height in inches 
     if (Int32.TryParse(Console.ReadLine(), out height)) 
      Convert.ToDecimal(height); 
     if (height > 120)                      // Print an error message stating that if user's input is over 120 then an error pops 
      Console.Write("\n height should be less than 120 inches, please press any key to exit:"); 
     if (height < 5)                       // Print an error message stating that if user's input is less than 5 then an error pops 
      Console.Write("\n height should be greater than 5 inches and if you entered a letter, \n please enter a number next time:\n"); 
     Console.WriteLine("\n Please enter the person's weight pounds:");          // Ask user to enter their weight in pounds 
     if (Int32.TryParse(Console.ReadLine(), out weight)) 
      Convert.ToDecimal(weight); 
     if (weight >= 999)                      // Print an error message if the user's input is more than 999 lbs 
      Console.Write("\n weight should be less than 999 pounds, please exit the application"); 
     if (weight <= 0.5)                     // Print an error message if the user's input is less than 0.5 lbs 
      Console.Write("\n weight should be greater than 0.5, \n if you did not enter a number, please enter a number next time:\n"); 

     /* Processing */ 

     bmi = Math.Round(weight/Math.Pow(height, 2) * factorBMI, 1);           // Calculates the user's BMI based on their height and weight input 

     /* Output */ 
     Console.WriteLine("************************************************************************************************************************"); 
     Console.WriteLine("\n the BMI for a " + height + "\" tall person who weighs: " + weight + "lb. is " + bmi); // Print user's height, weight and calculated BMI 
     if (bmi < 16)                        // If BMI is less than 16 then print the message 
      Console.WriteLine("\n base on your BMI you are severly underweight"); 
     else if (bmi <= 18)                      // If BMI is less than 18 then print the message 
      Console.WriteLine("\n base on your BMI you are underweight"); 
     else if (bmi <= 25)                      // If BMI is less than 25 then print the message 
      Console.WriteLine("\n base on your BMI you are healthy"); 
     else if (bmi <= 30)                      // If BMI is less than 30 then print the message 
      Console.WriteLine("\n base on your BMI you are overweight"); 
     else if (bmi > 30)                      // If BMI is more than 30 then print the message 
      Console.WriteLine("\n base on your BMI you are obese"); 

     /* Exit */ 

     Console.WriteLine("\n\n Thanks for using our program, you may now exit this program by presing any key:");// Print message telling the user to press any keys to exit application 
     Console.ReadKey(); 
+0

Poste bitte deinen Code. – A3006

+0

Wenn der Benutzer zum Beenden nur "beliebige Taste" drücken muss, wie können sie der Konsole ungültige Eingaben geben? Kopieren Sie und fügen Sie Ihren Code direkt in die Frage ein. Skizzieren Sie, was Sie zu tun versuchen, was das unerwünschte Verhalten ist und was Sie bisher versucht haben. – Lodestone6

+0

Willkommen bei Stack Overflow! Bitte sehen Sie [fragen] und [mcve]. – Mat

Antwort

0

Fügen Sie einen anderen Zweig zu Ihren if (Int32.TryParse ...) Aussagen wie hier:

if (!decimal.TryParse(Console.ReadLine(), out height)) 
{ 
    Console.WriteLine("Not a valid number"); //etc. 
    Console.ReadKey(); 
    Environment.Exit(0); 
} 

Aus Ihre anderen Fehler-Ausgänge machen Blöcke wie hier

if (height > 120) 
{ 
    Console.WriteLine("Your text"); 
    Console.ReadKey(); 
    Environment.Exit(0); 
} 
+0

Hey danke Mann, noch eine Frage. Wie kommt es, wenn ich versuche, eine Dezimalzahl einzugeben, es fordert die Schreibleiste und beendet die Anwendung? –

+0

@ChowLife Vielleicht kann diese Dezimalzahl nicht in Int32 konvertiert werden? –

+0

Wenn Sie eine Dezimaleingabe erwarten, sollten Sie besser decimal.TryParse anstelle von Int32.TryParse verwenden. Dann können Sie die Konvertierung speichern. Ich habe mein Codebeispiel bearbeitet. Kann auch sein, dass doppelt statt dezimal genug Präzision für Ihre Zwecke gibt, aber das muss Ihre Entscheidung sein. –

Verwandte Themen