«Мне нужно что-то, что постоянно оценивалось, если был дан правильный ответ (a, b, c и d - действительные ответы)».
Мне кажется, что если ответ «f» или что-то, что не указано «a», «b», «c» или «d», вам нужно, чтобы пользователь ввел другой ответ. Если это правильно, вам нужно & & вместо ||.
Я бы просто проверил введенный ответ на символы 'a' - 'd', а не как строку. Это позволяет пропустить использование списков, HashSets или Словари.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("1 + 2 = ?");
Console.WriteLine("a: 1");
Console.WriteLine("b: 2");
Console.WriteLine("c: 3");
Console.WriteLine("d: 4");
Console.Write("Select answer: ");
char ans;
do
{
// Only accept the first character, using .ToLower to ignore casing
ans = Console.ReadLine().ToLower()[0];
if (ans < 'a' || 'd' < ans)
{
Console.WriteLine("Please select a, b, c, or d!");
}
} while (ans < 'a' || 'd' < ans); // This is your clean up
Console.WriteLine(ans == 'c' ? "You are correct!" : "You are incorrect!");
}
}
Результаты:
1 + 2 = ?
a: 1
b: 2
c: 3
d: 4
Select answer: l
Please select a, b, c, or d!
m
Please select a, b, c, or d!
o
Please select a, b, c, or d!
c
You are correct!
См рабочий пример здесь ... https://dotnetfiddle.net/us7D3K
Вы можете поместить их в массив и проверить, если ваш 'ans' значение в массиве. –
Вы уверены, что не хотите '&&' там? – Marc
Простейшим было бы вывести уродство поименованному методу, поэтому более очевидно, что означает или все эти значения. – Levesque