Powershell Taschenrechner Programm Fehlerausgabe sonderzeichen?
Hallo Leute ich hab hier ein Skript für einen Taschenrechner und müsste hier nur die Funktion einbauen das er mir bei der Eingabe von Sonderzeichen eine ordentliche Fehlerausgabe gibt.
Dies hier ist soweit der Code:
Write-Host "Geben Sie zwei Zahlen ein" -ForegroundColor Red
Write-Host "Wählen Sie eine der vier möglichen Rechenoperationen aus:" -ForegroundColor Green
Write-Host "1: Zahl1 : Zahl2 = Ergebnis"
Write-Host "2: Zahl1 + Zahl2 = Ergebnis"
Write-Host "3: Zahl1 - Zahl2 = Ergebnis"
Write-Host "4: Zahl1 * Zahl2 = Ergebnis"
$Zahl1 = Read-Host "Bitte geben Sie die erste Zahl ein"
$Zahl2 = Read-Host "Bitte geben Sie die zweite Zahl ein"
[int]$Eingabe = Read-Host "Wählen Sie eine Rechenoperation"
$Zahl1 = $Zahl1.Replace(",",".")
$Zahl2 = $Zahl2.Replace(",",".")
$Zahl1 = [double] $Zahl1
$Zahl2 = [double] $Zahl2
#Zulässige Rechenoperationen definiert
switch ($Eingabe) {
1 {$Ergebnis = $Zahl1 / $Zahl2}
2 {$Ergebnis = $Zahl1 + $Zahl2}
3 {$Ergebnis = $Zahl1 - $Zahl2}
4 {$Ergebnis = $Zahl1 * $Zahl2}
}
#Fehlerausgabe bei Division durch 0 und Programmabbruch
if(($Zahl2 -eq 0) -and ($Eingabe -eq 1)){
$antwort = "Es darf nicht durch 0 geteilt werden";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ungültige Eingabe"); break
}
#Eingabe Rechenoperation darf nicht kleiner 1 und größer 4 sein.
if(($Eingabe -lt 1) -or ($Eingabe -gt 4) -or ($Eingabe -gt 10)){
$antwort = "Die Eingabe liegt nicht im Wertebereich 1-4";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ungültige Eingabe"); break
}
#stimmt die Eingabe mit dem Muster überein, so erfolgt die Berechnung und Ausgabe des Ergebnisses
else{
if($Eingabe -eq 1){
$antwort = " <" + $Zahl1 + "> : <" + $Zahl2 + "> = <" + $Ergebnis + "> ";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A durch B");
}
if($Eingabe -eq 2){
$antwort = " <" + $Zahl1 + "> + <" + $Zahl2 + "> = <" + $Ergebnis + "> ";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A plus B");
}
if($Eingabe -eq 3){
$antwort = " <" + $Zahl1 + "> - <" + $Zahl2 + "> = <" + $Ergebnis + "> ";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A minus B");
}
if($Eingabe -eq 4){
$antwort = " <" + $Zahl1 + "> * <" + $Zahl2 + "> = <" + $Ergebnis + "> ";
[System.Windows.Forms.MessageBox]::Show($antwort, "Ergebnis zu A mal B");
}
}
Kann mir da jemand weiterhelfen ohne meinen Code komplett zu verändern?
1 Antwort
Bau in dein Switch-Case für die zulässigen Rechenoperationen noch ein Default ein.
default {Write-Host "Fehlerhafte Eingabe";$Eingabe=-1}
Außerdem hab ich $Eingabe mal noch auf einen von dir nicht benutzten Integer gesetzt.
Also sollte das nicht nur für die Rechenoperationen gelten? Allerdings sollte der Fall durch den Cast auf double abgefangen werden.
Wenns dir darum ging, dass keine Strings o.Ä. statt der Zahlen 1 und 2 eingegeben werden und du die Casts entfernen möchtest, könnte dir Regex und Match weiterhelfen.
if(($Zahl1 -notmatch "^\d+$") -or ($Zahl2 -notmatch "^\d+$")){
$antwort = "Ungültige Eingabe"
[System.Windows.Forms.MessageBox]::Show($antwort, "Ungültige Eingabe"); break
}
Wenn ich die Line beim switch jetzt einfüge dann bekomm ich trotzdem keine richtige fehlermeldung falls ich bei der Eingabe davor statt zahlen sonderzeichen eingebe.. oder bin ich grade einfach nur zu blöd? ^^ sry bin in der Lehre und noch nicht der schlaueste in dem Gebiet