Gå til indholdet

N175 Gæt et tal (fejlhåndtering)

Lav en procedural version med fejlhåndtering af “Gæt et tal” spillet, hvor brugeren skal gætte et tilfældigt genereret tal mellem 1 og 100:

  • Programmet skal have en metode GenererTilfældigtTal, der returnerer et tilfældigt tal mellem 1 og 100.
  • Programmet skal have en metode HentTalFraBruger, der returnerer et tal indtastet af brugeren.
  • Programmet skal have en metode GivFeedback, der udskriver feedback baseret på brugerens gæt.
  • Programmet skal bruge top-level statements.
  • Hvis brugeren gætter forkert, skal programmet fortsætte med at bede om et nyt gæt, indtil brugeren gætter rigtigt.
  • Brugeren skal anvende try/catch til at håndtere fejl, hvis brugeren indtaster noget, der ikke er et tal. Bare smid en fejl med teksten “Forkert tal” så programmet stopper - men overvej en måde programmet blot kan fortsætte med at spørge brugeren efter et gyldigt tal
Klik for at se et forslag til en løsning
using System; // muligvis ikke nødvendig i nyere versioner af C# pga `ImplicitUsings`

int GenererTilfældigtTal()
{
    Random random = new();
    return random.Next(1, 101);
}

int HentTalFraBruger()
{
    try
    {
        Console.Write("Gæt et tal mellem 1 og 100: ");
        string input = Console.ReadLine();
        return Convert.ToInt32(input);
    }
    catch (FormatException ex)
    {            
        throw new Exception("Forkert tal " + ex.Message);
    }
}

// avanceret metode (kalder sig selv indtil der indtastes et korrekt tal)
int HentTalFraBruger2()
{
    try
    {
        Console.Write("Gæt et tal mellem 1 og 100: ");
        string? input = Console.ReadLine();
        return Convert.ToInt32(input);
    }
    catch (FormatException ex)
    {
        Console.WriteLine("Indtast venligst et gyldigt tal. " + ex.Message);
        return HentTalFraBruger2();
    }
}

void GivFeedback(int guess, int correctNumber)
{
    if (guess > correctNumber)
    {
        Console.WriteLine("For højt!");
    }
    else if (guess < correctNumber)
    {
        Console.WriteLine("For lavt!");
    }
}

int numberToGuess = GenererTilfældigtTal();
int userGuess;

do
{
    userGuess = HentTalFraBruger(); // eller HentTalFraBruger2()
    GivFeedback(userGuess, numberToGuess);
} while (userGuess != numberToGuess);

Console.WriteLine("Tillykke, du gættede det rigtige tal!");