1
resposta

[Dúvida] Desafio 3 - problema no else

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#, Dicionariose e Listas são ------ Genéricas", new List<string>{"Coleções"});


foreach (var pergunta in quizDePerguntas)
{
    Console.WriteLine(pergunta.Key);
    Console.WriteLine("Resposta");
    string resposta = Console.ReadLine()!;

        if (resposta.ToLower() == pergunta.Value[0].ToLower())
    {
        Console.WriteLine("Acertou\n");
        
    }
    else
    {
        Console.WriteLine($"Errou. A resposta correta é:{pergunta.Value[0]}\n");
    }


}

O programa funciona na primeira pergunta mas na segunda a resposta sempre será errada.Não sei one está o problema

1 resposta

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 ✓.