2016-11-03 4 views
10

Ich arbeite ein wenig mit switch Anweisungen und möchte wissen, wie Sie die Groß-/Kleinschreibung ignorieren, wenn es um Eingabewerte geht.C# Groß- und Kleinschreibung in Switch-Anweisung

Hier ist mein Code:

using System; 

namespace SwitchStatements 
{ 
class MainClass 
{ 
    public static void Main(string[] args) 
    { 
    Start: 
     Console.WriteLine("Please Input the Grade"); 
     char grade = Convert.ToChar(Console.ReadLine()); 

     switch (grade) 
     { 
      case 'A': 
       Console.WriteLine("Excellent Work!"); 
       break; 
      case 'B': 
       Console.WriteLine("Very Good Effort! Just a couple of  Errors =)"); 
       break; 
      case 'C': 
       Console.WriteLine("You Passed. Push Yourself Next Time"); 
       break; 
      case 'D': 
       Console.WriteLine("Better put in more effort next time. I know you can do better"); 
       break; 
      default: 
       Console.WriteLine("Invalid Grade."); 
       break; 
     } 
     Console.ReadKey(); 
     goto Start; 
    } 
} 
} 

Wenn ich setzen 'a' in anstelle von 'A' es gibt die Standardantwort.

Kann ich vielleicht einen .Vergleich in irgendeiner Form verwenden? Wenn ja, wo würde ich es hinstellen?

Antwort

5

können Sie ToUpper();

Wie
Convert.ToChar(Console.ReadLine().ToUpper()); 

verwenden und aus dem Fehler von mehr Charaters mit Console.ReadLine() bekommen Sie

char grd = Convert.ToChar(Console.ReadKey().KeyChar.ToString().ToUpper()); 
+1

Das war ein Vergnügen!Vielen Dank –

+0

@MohitShrivastava: Schätzen Sie den Kommentar für überzeugende Benutzer eine Teilantwort zu akzeptieren, Mit allem Respekt lassen Sie mich hier einige Hinweise hinzufügen, 'Console.ReadLine()' ermöglicht dem Benutzer mehr als ein Zeichen eingeben, in solchen Fällen ' Convert.ToChar() 'gibt Ihnen Fehler :). –

+0

Ja. Aber zu viele Konvertierungen, um den Zeichenwert zu erhalten –

1

Convert wie unten, bevor der Schalter in Großbuchstaben,

grade = Char.ToUpper(grade); 
9

Sie ConsoleKey als Bedingung für switch verwenden können, wird der Code wie die folgenden sein.

So können Sie vermeiden, die Eingabe in Großbuchstaben/Kleinbuchstaben zu konvertieren, und dann geht es für eine andere Konvertierung zu Char. Verwenden Sie einfach ConsoleKey Enumeration innerhalb des Schalters.

1

schreiben einschalten grade.ToUpper() wie folgt und nicht ändern ändert es Wert ist, kann man es nach

char grade = Convert.ToChar(Console.ReadLine()); 

    switch (grade.ToUpper()) 
    { 
     case 'A': 
      Console.WriteLine("Excellent Work!"); 
      break; 
     case 'B': 
      Console.WriteLine("Very Good Effort! Just a couple of  Errors =)"); 
      break; 
     case 'C': 
      Console.WriteLine("You Passed. Push Yourself Next Time"); 
      break; 
     case 'D': 
      Console.WriteLine("Better put in more effort next time. I know you can do better"); 
      break; 
     default: 
      Console.WriteLine("Invalid Grade."); 
      break; 
    } 
+0

@ S.Petrosov: Mit allem Respekt lassen Sie mich hier einige Notizen hinzufügen, Console.ReadLine() erlaubt dem Benutzer mehr als ein Zeichen eingeben, in solchen Fällen Convert.ToChar() wird Ihnen Fehler :). –

+0

Was würden Sie stattdessen empfehlen? –

+0

@MarcusBristow Sie sollten Convert.ToChar (Console.Read()) anstelle von Console.ReadLine() verwenden, wenn Sie nur 1 Zeichen lesen möchten. –

1

benötigen Sie wird von Fall zu Fall fallen könnten so

public static void Main(string[] args) 
{ 
    Boolean validInputRead = false; 
    Char grade; 

    while(!validInputRead) 
    { 
     validInputRead = true; 

     Console.WriteLine("Please Input the Grade"); 
     grade = Convert.ToChar(Console.Read()); 

     switch (grade) 
     { 
      case 'A': 
      case 'a': 
       Console.WriteLine("Excellent Work!"); 
       break; 

      case 'B': 
      case 'b': 
       Console.WriteLine("Very Good Effort! Just a couple of  Errors =)"); 
       break; 

      case 'C': 
      case 'c': 
       Console.WriteLine("You Passed. Push Yourself Next Time"); 
       break; 

      case 'D': 
      case 'd': 
       Console.WriteLine("Better put in more effort next time. I know you can do better"); 
       break; 

      default: 
       Console.WriteLine("Invalid Grade."); 
       validInputRead = false; 
       break; 
     } 

     Console.ReadKey(); 
    } 
} 

EDIT

  • geändert Console.ReadLine()-Console.Read() wie vorgeschlagen
  • Added while(!validInputRead) als
+0

Dies würde eine Menge unnötiger Wiederholungen beinhalten ... es ist besser, die Eingabe in Großbuchstaben umzuwandeln und dann damit umzugehen. – nmg49

+0

Was passiert, wenn ich 'A +' eingebe, wenn die Konsole mich auffordert "Bitte geben Sie die Note ein" ' –

+0

wird es abstürzen, weil' A + 'kein Char ist – Benj

1

String letterGrade verwenden können; int Klasse = 0;

 // This will hold the final letter grade 
     Console.Write("Input the grade :"); 

     switch (grade) 
     { 

      case 1: 
       // 90-100 is an A 
       letterGrade = "A"; 
       Console.WriteLine("grade b/n 90-100"); 
       break; 
      case 2: 
       // 80-89 is a B 
       letterGrade = "B"; 
       Console.WriteLine("grade b/n 80-89"); 
       break; 
      case 3: 
       // 70-79 is a C 
       letterGrade = "C"; 
       Console.WriteLine("grade b/n 70-79"); 
       break; 
      case 4: 
       // 60-69 is a D 
       letterGrade = "D"; 
       Console.WriteLine(" grade b/n 60-69 "); 
       break; 
      default: 
       // point whic is less than 59 
       Console.WriteLine("Invalid grade"); 

       break; 
     } 
Verwandte Themen