Oi, Ivan! Como vai?
Com o que você descreveu, o problema está no comparador entre a resposta e a lista de respostas corretas. No seu caso, o Dictionary<string, List<string>>
armazena as respostas esperadas, mas "Coleções" tem acento e a função ToLower()
não remove acentos, apenas deixa as letras minúsculas.
Isso significa que, se você digitar "colecoes" sem acento, mesmo estando "certo", o programa vai considerar errado.
Veja este exemplo com ajuste usando string.Equals()
e comparação ignorando acentos e maiúsculas:
using System;
using System.Collections.Generic;
using System.Globalization;
Dictionary<string, List<string>> quizDePerguntas = new Dictionary<string, List<string>>();
quizDePerguntas.Add("Em Orientação a Objeto, qual o nome da subrotina?", new List<string>{"metodo"});
quizDePerguntas.Add("Complete a frase: Em C#, Dicionarios e Listas sao ------ Genericas", new List<string>{"Colecoes"});
foreach (var pergunta in quizDePerguntas)
{
Console.WriteLine(pergunta.Key);
Console.WriteLine("Resposta:");
string resposta = Console.ReadLine()!;
// Comparacao ignorando acentos e maiusculas
if (RemoverAcentos(resposta).Equals(RemoverAcentos(pergunta.Value[0]), StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("Acertou\n");
}
else
{
Console.WriteLine($"Errou. A resposta correta é: {pergunta.Value[0]}\n");
}
}
string RemoverAcentos(string texto)
{
return new string(texto.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark)
.ToArray());
}
Sem acentuação, o código ficaria assim:
if (RemoverAcentos(resposta).Equals(RemoverAcentos(pergunta.Value[0]), StringComparison.OrdinalIgnoreCase))
Isso garante que mesmo digitando colecoes ou COLEÇÕES, a resposta seja aceita.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.