С# Чувствительность к регистру в Switch-statement
Я немного работаю с операторами switch
и хочу знать, как игнорировать чувствительность к регистру, когда дело доходит до входных значений.
Вот мой код:
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;
}
}
}
Если я помещаю 'a' вместо вместо A, он возвращает ответ по умолчанию.
Могу ли я использовать, возможно, какое-то сравнение? Если да, то где бы я это сказал?
Ответы
Ответ 1
Вы можете использовать ConsoleKey
как условие для switch
, код будет выглядеть следующим образом.
var grade =Console.ReadKey().Key;
switch (grade)
{
case ConsoleKey.A:
Console.WriteLine("Excellent Work!");
break;
case ConsoleKey.B:
// Something here
break;
case ConsoleKey.C:
// Something here
break;
case ConsoleKey.D:
// Something here
break;
case ConsoleKey.E:
// Something here
break;
default:
// Something here
break;
}
Так что вы можете избежать преобразования ввода в верхний регистр/нижний регистр, а затем перейти к другому преобразованию в Char. Просто используйте ConsoleKey
Перечисление внутри коммутатора.
Ответ 2
Вы можете использовать ToUpper();
Как
Convert.ToChar(Console.ReadLine().ToUpper());
и чтобы получить спасение от ошибки получения большего количества символов с помощью Console.ReadLine()
, вы можете использовать
char grd = Convert.ToChar(Console.ReadKey().KeyChar.ToString().ToUpper());
Ответ 3
вы можете использовать, например, следующие
char grade = Convert.ToChar(Console.ReadLine().ToUpperInvariant());
https://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx
Ответ 4
Изменить
char grade = Convert.ToChar(Console.ReadLine());
Для
char grade = Convert.ToChar(Console.ReadLine().ToUpper());
https://msdn.microsoft.com/en-us/library/system.string.toupper(v=vs.110).aspx
Ответ 5
Преобразовать в верхний регистр перед переключением, как показано ниже,
grade = Char.ToUpper(grade);
Ответ 6
Write Переключить на класс .ToUpper(), как это, и не изменять значение его значения, возможно, вам понадобится его после
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;
}
Ответ 7
Вы можете упасть из одного случая в другой, как это
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();
}
}
ИЗМЕНИТЬ
- Изменено от
Console.ReadLine()
до Console.Read()
как предложено
- Добавлен
while(!validInputRead)
в соответствии с запросом
Ответ 8
string letterGrade; int grade = 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;
}