Member 13757304 Ответов: 2

Как кодировать, если символ не является 'a', 'B', 'C', 'D' или 'E'


Как кодировать, если символа нет 'A','B','C','D' или 'E' от выбора
а работа если капитальная 'A' или маленький 'a'

Что я уже пробовал:

static void EnterAnswer(char[] CorrectAnswer)
        {
            char question=' ';
            for (int i = 0; i < 20; i++)
            {                
                Console.WriteLine("Question: {0}/20", question++);
                Console.Write("--------------");
                Console.WriteLine("A)");
                Console.WriteLine("B)");
                Console.WriteLine("C)");
                Console.WriteLine("D)");
                Console.WriteLine("E)");
                question = Console.ReadKey().KeyChar;
                Console.Clear();
            }
            while (!char.TryParse(Console.ReadLine(), out question) || !question.Equals('a') && !question.Equals('b') && !question.Equals('c') && !question.Equals('d') && !question.Equals('e'))
{
       Console.Write("Invalid entry, Please enter again : ");
}

CHill60

Используйте .Верхний()

j snooze

Вы уверены, что закодировали это правильно? .Upper() должен работать.
Ваша новая проверка линии должна быть
в то время как (!вопрос.Верхний()."Равно" ('А') || !вопрос.Верхний().Равна('Б') &&усилителя; !вопрос.Верхний().Равна('С') &&усилителя; !вопрос.Верхний().Равна('Д') &&усилителя; !вопрос.Upper().Equals('E'))

an0ther1

То обуглить тип данных не имеет метода 'ToUpper' или 'Upper' - refer; https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/char

с уважением

j snooze

https://msdn.microsoft.com/en-us/library/7d723h14(v=против 110).aspx
Это говорит о том, что у него действительно есть Топпер.

an0ther1

Вот так, учись чему-нибудь каждый день!!
EDIT: я еще раз взглянул на это & yep, char действительно имеет метод ToUpper, но он не может быть вызван из char, как вы бы сделали со строкой, вам нужно использовать Char.ToUpper(myCharVariable) - я добавлю в заметке о решении, которое я добавил.
Ура &амп; спасибо

PIEBALDconsult

Я бы использовал набор.

2 Ответов

Рейтинг:
1

Graeme_Grant

В качестве альтернативного решения вы можете сделать что-то вроде:

char[] validInput = new[] { 'A', 'B' };
char inKey;
bool isValid = false;

// loop until valid...
while (!(isValid = (validInput).Contains(char.ToUpper(inKey = Console.ReadKey().KeyChar))))
{
    Console.WriteLine("\nInvalid entry. Please try again");
}
Console.WriteLine($"\nValid entry: {inKey}");


Рейтинг:
0

an0ther1

Приставка.ReadKey возвращает объект ConsoleKeyInfo - см.; Приставка.Метод ReadKey (Система)[^]
Приведенная выше ссылка также даст вам пример, но краткий ответ будет следующим;

// Wait unit user enters a value
ConsoleKeyInfo ck = Console.ReadKey();
// I am just checking for A, B & C but extend as required
if(ck.Key.ToString().ToUpper() != "A" && ck.Key.ToString().ToUpper() != "B" && ck.Key.ToString.ToUpper() != "C")
{
    Console.WriteLine("Invalid entry. Please try again");
}

Вы также можете использовать регулярные выражения для этого - см.; Класс Регулярных Выражений (System.Text.RegularExpressions)[^] Что было бы быстрее.

Использование символов сложнее, но все же возможно, но вам нужно либо преобразовать его в строку, либо использовать 16 - битное числовое значение при сравнении - (a = 97, A = 65 и т. д.), Так как это то, что на самом деле хранится- см.; Таблица Ascii - коды символов ASCII и html, восьмеричное, шестнадцатеричное и десятичное преобразование диаграмм[^]

EDIT: в приведенных выше комментариях было указано, что существует метод ToUpper, доступный для типа данных char, но вы не можете использовать char.ToUpper(), вам нужно передать символ для фреймворка, чтобы преобразовать его.
Если вы действительно хотите использовать этот метод, приведенный выше код будет изменен следующим образом;
char question = Console.ReadKey().KeyChar;
if(char.ToUpper(question) != 'A' && char.ToUpper(question) != 'B' && char.ToUpper(question) != 'C')
{
    Console.WriteLine("Invalid entry. Please try again");
}


с уважением