Simulateur de quiz à choix multiples en C# avec score final, validation robuste des réponses et code extensible pour une expérience console optimale.
using System;
using System.Collections.Generic;
namespace QuizSimulatore
{
// Classe représentant une seule question du quiz
public class Question
{
public string Testo { get; set; } // Texte de la question
public List<string> Opzioni { get; set; } // Liste des options de réponse
public int IndiceRispostaCorretta { get; set; } // Index (base 0) de la réponse correcte
// Constructeur
public Question(string testo, List<string> opzioni, int indiceRispostaCorretta)
{
Testo = testo;
Opzioni = opzioni;
IndiceRispostaCorretta = indiceRispostaCorretta;
}
// Méthode pour vérifier si la réponse donnée est correcte
public bool VerificaRisposta(int rispostaUtente)
{
return rispostaUtente == IndiceRispostaCorretta;
}
}
class Program
{
static void Main(string[] args)
{
// Liste des questions du quiz
List<Question> domande = new List<Question>
{
new Question(
"Quel est le langage de programmation principal utilisé dans cet exemple ?",
new List<string> { "Java", "Python", "C#", "JavaScript" },
2 // C# est la troisième option (index 2)
),
new Question(
"Quelle méthode est utilisée pour lire l'entrée depuis la console ?",
new List<string> { "Console.ReadLine()", "Console.Write()", "Console.Read()", "Console.WriteLine()" },
0
),
new Question(
"Comment définit-on une liste en C# ?",
new List<string> { "List<>", "ArrayList", "LinkedList", "Dictionary" },
0
),
new Question(
"Quel mot-clé est utilisé pour déclarer une classe en C# ?",
new List<string> { "function", "class", "def", "var" },
1
),
new Question(
"Quelle méthode est utilisée pour vérifier si la réponse est correcte ?",
new List<string> { "CheckAnswer()", "VerificaRisposta()", "IsCorrect()", "AnswerCheck()" },
1
)
};
int punteggio = 0; // Compteur des réponses correctes
Console.WriteLine("Bienvenue au Quiz à Choix Multiples !\n");
// Boucle sur toutes les questions
for (int i = 0; i < domande.Count; i++)
{
Question q = domande[i];
Console.WriteLine($"Question {i + 1} : {q.Testo}");
// Affiche les options numérotées
for (int j = 0; j < q.Opzioni.Count; j++)
{
Console.WriteLine($" {j + 1}. {q.Opzioni[j]}");
}
int rispostaUtente = -1;
bool inputValido = false;
// Boucle tant que l'utilisateur n'entre pas une entrée valide
while (!inputValido)
{
Console.Write("Entrez le numéro de votre réponse : ");
string input = Console.ReadLine();
// Essaie de convertir l'entrée en entier
if (int.TryParse(input, out int scelta))
{
// Vérifie que le choix est dans la plage valide
if (scelta >= 1 && scelta <= q.Opzioni.Count)
{
rispostaUtente = scelta - 1; // Convertit en index base 0
inputValido = true;
}
else
{
Console.WriteLine("Erreur : entrez un numéro correspondant à une des options.");
}
}
else
{
Console.WriteLine("Erreur : entrée non valide, entrez un numéro.");
}
}
// Vérifie la réponse et met à jour le score
if (q.VerificaRisposta(rispostaUtente))
{
Console.WriteLine("Bonne réponse !\n");
punteggio++;
}
else
{
Console.WriteLine($"Mauvaise réponse. La bonne réponse était : {q.Opzioni[q.IndiceRispostaCorretta]}\n");
}
}
// Affiche le score final
Console.WriteLine($"Quiz terminé ! Vous avez répondu correctement à {punteggio} questions sur {domande.Count}.");
double percentuale = (double)punteggio / domande.Count * 100;
Console.WriteLine($"Votre score est : {percentuale:F2}%");
Console.WriteLine("Appuyez sur une touche pour quitter...");
Console.ReadKey();
}
}
}