1
resposta

[Projeto] Desafio: hora da prática

using System.Security.Cryptography;

var quiz = new Dictionary<string, List<string>> {
    {
        "Qual é a função principal de um compilador?", new List<string>
        {
            "a) Executar o código diretamente",
            "b) Traduzir o código-fonte para linguagem de máquina",
            "c) Editar o código escrito pelo programador",
            "d) Armazenar variáveis na memória"
        }
    },
    {
        "Qual das opções representa um tipo de dado primitivo em C#?", new List<string>
        {
            "a) List<int>",
            "b) string",
            "c) Array",
            "d) Dictionary"
        }
    },
    {
        "O que significa a palavra-chave void em uma função?", new List<string>
        {
            "a) Que a função retorna um número inteiro",
            "b) Que a função retorna um valor booleano",
            "c) Que a função não retorna nenhum valor",
            "d) Que a função retorna uma string"
        }
    },
    {
        "Qual estrutura de controle é usada para repetir um bloco de código enquanto uma condição for verdadeira?", new List<string>
        {
            "a) while",
            "b) switch",
            "c) if",
            "d) break"
        }
    }
};

Console.WriteLine("Bem vindo ao Quiz sobre fundamentos de Programação");
Console.WriteLine("Informar uma opção que não existe será contado como opção incorreta\n");
Console.WriteLine("Boa sorte!\n");

int numeroDaQuestao = 1;

foreach (var key in quiz.Keys)
{
    Console.WriteLine($"{key} \n");
    Console.WriteLine(quiz[key][0]);
    Console.WriteLine(quiz[key][1]);
    Console.WriteLine(quiz[key][2]);
    Console.WriteLine($"{quiz[key][3]} \n");
    Console.Write("informe a sua resposta: ");
    char resposta = char.Parse(Console.ReadLine()!);
    CorrecaoDaResposta(numeroDaQuestao, resposta);
    numeroDaQuestao++;
    Console.Clear();
}

Console.WriteLine("Quiz encerrado!");
void CorrecaoDaResposta (int questao, char resposta)
{
    switch (numeroDaQuestao) 
    { 
        case 1:
            if (resposta == 'b')
            {
                Console.WriteLine("\nResposta correta!\n");
                Thread.Sleep(2000);
            } else
            {
                Console.WriteLine("\nResposta incorreta!\n");
                Thread.Sleep(2000);
            }
            break;
        case 2:
            if (resposta == 'b')
            {
                Console.WriteLine("\nResposta correta!\n");
                Thread.Sleep(2000);
            }
            else
            {
                Console.WriteLine("\nResposta incorreta!\n");
                Thread.Sleep(2000);
            }
            break;
        case 3:
            if (resposta == 'c')
            {
                Console.WriteLine("\nResposta correta!\n");
                Thread.Sleep(2000);
            }
            else
            {
                Console.WriteLine("\nResposta incorreta!\n");
                Thread.Sleep(2000);
            }
            break;
        case 4:
            if (resposta == 'a')
            {
                Console.WriteLine("\nResposta correta!\n");
                Thread.Sleep(2000);
            }
            else
            {
                Console.WriteLine("\nResposta incorreta!\n");
                Thread.Sleep(2000);
            }
            break;
        default:
            break;
    }
}
1 resposta

Oii, José Willamys.

Meus parabéns por finalizar esse desafio. É empolgante ver como você utilizou um Dictionary para estruturar um sistema de quiz, unindo o armazenamento de dados com a lógica de interação no console.

Sua solução demonstra um bom domínio sobre coleções e estruturas de repetição. Ao associar uma pergunta (chave) a uma lista de opções (valor), você criou uma base de dados organizada e fácil de percorrer com o foreach. O uso do Thread.Sleep e Console.Clear também colabora para uma experiência de usuário mais cadenciada e limpa.

Pra elevar ainda mais a qualidade do seu projeto, deixo uma observação sobre a escalabilidade: no seu código, a resposta correta está "presa" dentro de um switch baseado no número da questão.

Se você quisesse adicionar 50 perguntas, o método CorrecaoDaResposta ficaria muito grande. Uma alternativa interessante seria guardar a resposta correta dentro do próprio dicionário ou em uma classe Questao.

Assim, você poderia comparar a resposta do usuário diretamente, sem precisar de um switch gigante. Você pode explorar mais sobre como organizar seus dados na documentação oficial sobre Dicionários em C#.

Você conseguiu perceber como a lógica de verificação se tornaria mais simples se a "letra correta" também estivesse guardada junto com a pergunta no seu dicionário?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!