2017-06-04 7 views
0

Ich beginne gerade in C# und ich machte diesen ziemlich einfachen Rechner. Zuallererst, was denkst du über meinen Code, gibt es etwas, das ich verbessern sollte? Zweitens, wenn ich den Benutzer frage, 2 Zahlen einzugeben, wie mache ich es so, dass er nur Zahlen eingeben kann? Wenn der Benutzer ein anderes Zeichen eingibt, bleibt die Schleife hängen und das Programm stürzt ab.Wie man nur Zahlen in Benutzereingabe erlaubt

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Threading; 

namespace App1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool retry = true; 
      while (retry) 
      { 
       retry = true; 
       double x1; 
       double x2; 
       double x3; 
       string calc; 
       Console.WriteLine("**** Hello, Welcome to Calculator ****"); 
       Console.WriteLine("Type a number please: "); 

       x1 = Convert.ToDouble(Console.ReadLine()); 
       Console.WriteLine("\n Now type another number: "); 
       x2 = Convert.ToDouble(Console.ReadLine()); 

       Console.WriteLine("\n Now please select a calculation:(/,*,+/-)"); 
       calc = Convert.ToString(Console.ReadLine()); 
       if (calc == "*") 
       { 
        x3 = (x1 * x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "/") 
       { 
        x3 = (x1/x2); Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "+") 
       { 
        x3 = (x1 + x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "-") 
       { 
        x3 = (x1 - x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else 
       { 
        Console.WriteLine("\n Error, please type one of the 4 calculations: "); 
        retry = true; 
       } 

       //Don't Exit: 
       Console.ReadKey(); 
       //Don't Exit: 
      } 
     } 
    } 
} 

Antwort

1

können Sie Double.TryParse verwenden, um sicherzustellen, dass die Eingabe des Benutzers ein gültiges Doppel ist. Diese Methode hat den Vorteil, dass keine Ausnahme ausgelöst wird, wenn sie eine ungültige Eingabe erhält.

Nutzungs funktioniert wie folgt:

double x1; 
Console.WriteLine("Type a number please: "); 
bool success = Double.TryParse(Console.ReadLine(), out x1); 

Was wir tun, ist hier wir C# zu versuchen, erzählen die Eingabe in ein Doppel zu konvertieren. Wenn dies funktioniert, ist success wahr und x1 enthält diesen Wert. Wenn nicht, ist der Erfolg falsch und es wird keine Ausnahme ausgelöst.

HINWEIS: Wenn diese Syntax verwirrend ist, lesen Sie die Dokumentation des Schlüsselworts out kurz durch.

Die Variable success ermöglicht es Ihnen festzustellen, ob der Benutzer eine Nummer eingegeben hat. Sie können diese wickeln alle in einer Schleife, so dass das Programm schreitet nur dann, wenn der Benutzer wie so eine Nummer eingibt:

bool success = false; 
double x1; 
while (!success) 
{ 
    Console.WriteLine("Type a number please: "); 
    success = Double.TryParse(Console.ReadLine(), out x1); 
} 

Diese Schleife wird wiederholt, immer wieder, bis der Benutzer eine Nummer, an welcher Stelle es getreten ist wird beendet und der Eingang wird in x1 gespeichert. Sie können dies sowohl für die zweite Nummer als auch für die Operation eingeben (Addition, Multiplikation usw.).

Ein extra Ratschlag, wenn ich einen Blick auf C# 's switch Schlüsselwort kann, nehmen, die Sie erspart so viele else if Aussagen zu Kette, sowie das break Schlüsselwort, das die retry Variable im Code überflüssig macht.

EDIT: Um "Verwendung von nicht zugewiesenen lokalen Variablen" zu verhindern, müssen Sie Ihren Zahlen einen Anfangswert geben. Beispiel:

double x1 = 0.0; 

Dies wird das Programm nicht beeinflussen, da, vorausgesetzt, Sie mit der Schleife gingen, Ausführung schreitet nicht fort, bis eine gültige Nummer eingegeben wurde, und dieser Wert geändert hat.

+0

Vielen Dank, aber nicht mein Code sagt x1 und x2 haben keine Werte. – user1930233

+1

Sorry, verpasste das. Überprüfen Sie die Bearbeitung. – stybl

+0

wunderbar, funktioniert perfekt. Will auch in Switch-Anweisungen schauen, wie du gesagt hast, – user1930233

Verwandte Themen