6236 Programmering I Agenda/Error handling

From Teknologisk videncenter
Jump to: navigation, search

I et at input eksemplerne konverterede vi de intastede data fra string til Int32 eller double, men hvis brugeren indtaster noget der ikke kan konverteres (f.eks. et navn) vil programmet gå ned.

Det kan vi håndterer på en af følgende måder.

Med Try markeres den del af koden man forventer der kan opstå fejl ved. Hvis der opstår en fejl vil programmet hopppe ned til Catch og udfører det som står i denne del. I viste eksempel udskrives den fejl kode som overføres i Eceptionen e. Derefter fortsættes program afviklingen.

//Bed brugeren om at indtaste varenavn
System.Console.Write("Indtast varenavn ");
varenavn = System.Console.ReadLine();

try
{
	//Bed brugeren om at indtaste antal
	System.Console.Write("Indtast antal ");
	antal = Convert.ToInt32(System.Console.ReadLine()); 

	//Bed brugeren om at indtaste pris
	System.Console.Write("Indtast stk. pris ");
	pris = Convert.ToDouble(System.Console.ReadLine());
}
catch (Exception e)
{
	System.Console.WriteLine(e.Message);
}
 

Indtast varenavn Appelsin
Indtast antal to
Inputstrengen var ikke i et korrekt format.

Et alternativ er at benytte TryParse, den er lidt mere kompliceret men også hurtigere end Try Catch.

Man kalder TryParse på Double ved at skrive Double.TryParse efterfulgt af den streng som skal konverteres og den variable man gerne vil have output i.

Hvis konverteringen går godt bliver det true ellers false.

I viste eksempel konverteres strengen 2,34 til tal.

Double tal;
if(Double.TryParse("2,34", out tal))
{
	System.Console.WriteLine("Input var et tal");
}
else
{
	System.Console.WriteLine("Input var ikke et tal");
}

Der findes TryParse både til Double og til Int32 og mange andre.

Som input kan man naturligvis også anvende brugerens input.

Bemærk at der i If sætningen står if (!Double.TryParse. ! betyder i den sammenæng NOT altså hvis TryParse ikke kan konvertere.

//Bed brugeren om at indtaste varenavn
System.Console.Write("Indtast varenavn ");
varenavn = System.Console.ReadLine();

//Bed brugeren om at indtaste antal
System.Console.Write("Indtast antal ");
if (!Int32.TryParse(System.Console.ReadLine(),out antal))
{
	System.Console.WriteLine("Det indtastede er ikke korrekt");
}

//Bed brugeren om at indtaste pris
System.Console.Write("Indtast stk. pris ");
if (!Double.TryParse(System.Console.ReadLine(),out pris))
{
	System.Console.WriteLine("Det indtastede er ikke korrekt");
}

En mere oplagt mulighed er at anvende et while loop så programmet bliver ved at spørge indtil der er indtastet korrekt.

//Bed brugeren om at indtaste varenavn
System.Console.Write("Indtast varenavn ");
varenavn = System.Console.ReadLine();

//Bed brugeren om at indtaste antal
System.Console.Write("Indtast antal ");
while (!Int32.TryParse(System.Console.ReadLine(),out antal))
{
	System.Console.WriteLine("Det indtastede er ikke korrekt");
}

//Bed brugeren om at indtaste pris
System.Console.Write("Indtast stk. pris ");
while (!Double.TryParse(System.Console.ReadLine(),out pris))
{
	System.Console.WriteLine("Det indtastede er ikke korrekt");
}
 

Indtast varenavn Appelsin
Indtast antal to
Det indtastede er ikke korrekt
tre
Det indtastede er ikke korrekt
3
Indtast stk. pris 3,50 kr
Det indtastede er ikke korrekt
3,5

3 Appelsin af 3,5kr/stk. = 10,5kr

Opgave

Indfør fejlhåndtering i dit benzin program.