Gå til indholdet

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:

Indtast 1. tal
a
Der er sket en fejl - The input string 'a' was not in a correct format.

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:

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++;
        }
    }
}