try und catch anweisung

stef78

Grünschnabel
hallo leute!

könnte mir jemand, der sich mit try und catch anweisungen auskennt, erklären, was an meinem code falsch ist (in c#): ich habe folgende methode programmiert:

public static char ArithmeticOperation()
{
char selection;
//do
//{
Console.WriteLine("\nWelche Rechenoperation wollen Sie durchfuehren?" +
"\n(A)ddition\n(S)ubtraktion\n(M)ultiplikation\n(D)ivision\n(F)aktorielle\n(P)otenz\nModu(l)o");
try
{
selection = Convert.ToChar(Console.ReadLine().ToLower());
return selection;
}
catch(Exception Buchstabe)
{
Console.Write("\aFehler. Bitte geben Sie einen Buchstaben ein!." + Buchstabe.Message);
return '0';
}
//}while();
}

das try catch soll eine falsche eingabe (in diesem fall ein tippen eines zeichens, dass kein buchstabe ist) abfangen und die error message schreiben. mein programm soll aber, sobald der user ein falsches zeichen eingibt (also keinen buchstabe), nochmal starten - ich denke, ich kann das über einen do while loop machen. nur wie?

vielen dank für jegliche hilfe! :)

stef
 
Hi.

Damit er immer wieder nach der Eingabe fragt, bis was korrektes kommt, brauchst du eine Schleife.
Dies könnte dann in deinem Fall so aussehen:
Code:
while (true)
{
	Console.WriteLine("\nWelche Rechenoperation wollen Sie durchfuehren?" +
	"\n(A)ddition\n(S)ubtraktion\n(M)ultiplikation\n(D)ivision\n(F)aktorielle\n(P)otenz\nModu(l)o");
	try
	{
		char selection = Convert.ToChar(Console.ReadLine().ToLower());
		return selection;
	}
	catch(Exception Buchstabe)
	{
		Console.Write("\aFehler. Bitte geben Sie einen Buchstaben ein!." + Buchstabe.Message);
	}	
}

Allerdings wird er nur in den Catch-Block springen wenn du mehrere Zeichen in der Konsole eingibst, weil es dann ja nicht in einen Char umgewandelt werden kann.
Du musst dir also noch eine Abfrage schreiben obs ein gültiges Zeichen ist. ;)

Übrigens, bitte gewöhne die eine einigermaßen korrekte Groß-/Kleinschreibung an, so wie wir es gerne hätten. (Siehe Netiquette)

MfG,
Alex
 
Hi,

ich hätte das so gemacht:
Code:
public char ArithmeticOperation()
{
    char selection;

    Console.WriteLine("\nWelche Rechenoperation wollen Sie durchfuehren?" +
    "\n(A)ddition\n(S)ubtraktion\n(M)ultiplikation\n(D)ivision\n(F)aktorielle\n(P)otenz\nModu(l)o");

    selection = Convert.ToChar(Console.ReadLine().ToLower());
    if (this.IsValidChar(selection))
    {
        return selection;
    }
    else
    {
        Console.Write("\aFehler. Bitte geben Sie einen Buchstaben ein!.");
        ArithmeticOperation();
    }
    return '.';
}

public bool IsValidChar(char c)
{
    char[] options = new char[]{'a','s','m','d','f','p','l'};
    for (int i = 0; i < options.Length; i++)
	if (c == options[i])
		return true;
    return false;
}
 
Zuletzt bearbeitet:
Ganz nett, nur hast du einen Fehler.

Wenn man mindestens einmal etwas falsches eingegeben hat, wird er danach niemals die richtige Eingabe zurück geben, sondern nur '.'.

Code:
if (this.IsValidChar(selection))
    {
        return selection;
    }
    else
    {
        Console.Write("\aFehler. Bitte geben Sie einen Buchstaben ein!.");
        return ArithmeticOperation();
    }
 
Hi Alex!

Vielen Dank fuer den Tip, ich probiere dies gleich mal aus. Die Abfrage habe ich oben schon mal programmiert.

Lg,
Stef
 
Zurück