N175 Gæt et tal (fejlhåndtering)
Tip
Se N155 Gæt et tal (iterativ version) og N157 Gæt et tal (procedural version) før du kaster dig over denne!
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!");