N170 Simple fejlhåndtering
Du skal skabe en tom konsol app med følgende kode:
using System; // muligvis ikke nødvendig i nyere versioner af C# pga `ImplicitUsings`
Run();
void Run()
{
Console.WriteLine("Indtast 1. tal");
int tal1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Indtast 2. tal");
int tal2 = Convert.ToInt32(Console.ReadLine());
int res = tal1 + tal2;
Console.WriteLine("resultatet er " + res);
}
Se om koden virker ved at indtaste to tal. Prøv så at indtaste noget der ikke kan konverteres til et tal. Den skulle gerne fejle.
Indtast 1. tal
a
Unhandled exception. System.FormatException: The input string 'a' was not in a correct format.
at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)
at System.Convert.ToInt32(String value)
at Program.<<Main>$>g__Run|0_0() in C:\temp\Legeplads\Program.cs:line 8
at Program.<Main>$(String[] args) in C:\temp\Legeplads\Program.cs:line 3
Sørg nu for at tilføje den korrekte fejlhåndtering, og skriv ”Der er sket en fejl – [den konkret exception message]” ved en eventuel fejl:
Udvidelse
Overvej hvordan koden kan ændres således, at brugeren blot bliver bedt om at prøve igen - dog max 3 gange. Se forslag til løsning i metoden PrøvIgen.
Tip
Hvis du er i tvivl om hvordan du skaber en konsolapplikation så følg:
- Denne guide hvis du arbejder i Visual Studio Code
- Denne guide hvis du arbejder i Visual Studio
Klik for at se et forslag til en løsning
using System; // muligvis ikke nødvendig i nyere versioner af C# pga `ImplicitUsings`
try
{
Run();
}
catch (Exception ex)
{
Console.WriteLine("Der er sket en fejl – " + ex.Message);
}
// Men se også....
//Simpel();
//PrøvIgen();
void Run()
{
Console.WriteLine("Indtast 1. tal");
int tal1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Indtast 2. tal");
int tal2 = Convert.ToInt32(Console.ReadLine());
int res = tal1 + tal2;
Console.WriteLine("resultatet er " + res);
}
void Simpel()
{
int tal1 = HentTal("Indtast 1. tal");
int tal2 = HentTal("Indtast 2. tal");
int res = tal1 + tal2;
Console.WriteLine("resultatet er " + res);
}
int HentTal(string tekst)
{
try
{
Console.WriteLine(tekst);
int tal = Convert.ToInt32(Console.ReadLine());
return tal;
}
catch (Exception ex)
{
Console.WriteLine("Der er sket en fejl " + ex.Message);
throw; // samme som throw ex;
}
}
void PrøvIgen()
{
int prøvAntalGange = 3;
int antal = 0;
while (antal < prøvAntalGange)
{
try
{
int tal1 = HentTal("Indtast 1. tal");
int tal2 = HentTal("Indtast 2. tal");
int res = tal1 + tal2;
Console.WriteLine("resultatet er " + res);
break;
}
catch (Exception)
{
antal++;
}
}
}