Powershell: Taschenrechner funktioniert nicht?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

In der ersten If versuchst du die Werte mit einem "=" zu vergleichen. Dies zu "-eq" ändern, wie bei den anderen If Abfragen auch.

if($a = "/" -and ($c = "0"))

if ($a -eq "/" -and ($c -eq "0"))

Außerdem fehlt dort vor dem "read-Host" die Variable.

read-Host "Geben Sie die 2. Zahl erneut ein."

$c = read-Host "Geben Sie die 2. Zahl erneut ein."

Zur Übersicht benenne die Variablen bitte nicht mit a,b,... sondern vergebe aussagekräftige Namen.


mfra1999  20.01.2019, 17:13

cls

write-host "Herzlich Willkommen"

[char]$operation = Read-Host "Welche Operation m�chten Sie ausf�hren +,-,,/ ?"

[double]$ergebniss = ""

[double] $zahlEins = Read-Host "Geben Sie die erste Zahl ein"

[double] $zahlZwei = Read-Host "Geben Sie die erste Zahl ein"

do {

write-host "Durch 0 nicht teilbar."

$zahlZwei = read-Host "Geben Sie die 2. Zahl erneut ein."

} while ($operation -eq "/" -and ($zahlZwei -eq "0"))

if ($operation -eq "+") {

$ergebniss = $zahlEins + $zahlZwei

write-Host "Ihr Resultat betr�gt $ergebniss"

}

elseif ($operation -eq "-") {

$ergebniss = $zahlEins - $zahlZwei

write-Host "Ihr Resultat betr�gt $ergebniss"

}

elseif ($operation -eq "") {

$ergebniss = $zahlEins * $zahlZwei

write-Host "Ihr Resultat betr�gt $ergebniss"

}

elseif ($operation -eq "/") {

$ergebniss = $zahlEins / $zahlZwei

write-Host "Ihr Resultat betr�gt $ergebniss"

}

else {

write-Host "Dieser Operator wir nicht erkannt"

}

mfra1999  20.01.2019, 17:15
@mfra1999

Ich habe den Code mal abgeändert und die Variablen umbenannt.
Die erste If habe ich in eine "Do While" abgeändert, so wird der User solange aufgefordert die Zweite Zahl einzugeben, bis er eine andere Zahl als 0 eingibt.
Bei weiteren Fragen gerne melden :)

lslschr 
Beitragsersteller
 20.01.2019, 19:48
@mfra1999

Perfekt Besten Dank für die schnelle Antwort und die schnelle verbesserung.

lslschr 
Beitragsersteller
 20.01.2019, 20:08
@mfra1999

Leider kommt nun, bei jeder Division die Fehlermeldung nicht durch null teilbar und man solle die zweite Zahl erneut eingeben. Mit der Schlaufe stimmt da etwas noch nicht. trz danke

lslschr 
Beitragsersteller
 20.01.2019, 20:12
@lslschr

EDIT: Es kommt bei jeder Operation sogar

mfra1999  20.01.2019, 23:00
@lslschr

Oh, da habe ich mich vertan. Es muss eine normale while Schleife sein und keine do-while.
--> Das "do" durch "while ($operation -eq "/" -and ($zahlZwei -eq "0"))" ersetzen und am ende der Schleife wegnehmen.

Dann sollte eigentlich alles stimmen, oder?

mfra1999  20.01.2019, 23:28
@lslschr
cls

write-host "Herzlich Willkommen"

[char]$operator = Read-Host "Welche Operation m�chten Sie ausf�hren + , - , * , / ?"

#operator überprüfen / erneute eingabe
while (($operator -ne "+") -and ($operator -ne "-") -and ($operator -ne "*") -and ($operator -ne "/")) {

    write-host "Dieser Operator wir nicht erkannt"

    $operator = read-Host "Geben Sie einen der angegebenen Operatoren an: + , - , * , / "
} 

[double]$ergebniss = ""

[double] $zahlEins = Read-Host "Geben Sie die erste Zahl ein"

[double] $zahlZwei = Read-Host "Geben Sie die erste Zahl ein"

#Sonderfall division durch 0 abfangen
while ($operator -eq "/" -and ($zahlZwei -eq "0")) {

    write-host "Durch 0 nicht teilbar."

    $zahlZwei = read-Host "Geben Sie die 2. Zahl erneut ein."
} 

#falls überprüfung per while schleife oben nicht vorhanden, an dieser stelle prüfen ob operator vorhanden
# if ($operator -eq ("+") -or $operator -eq ("-") -or $operator -eq ("*") -or $operator -eq ("/")) {

switch ($operator) {
    "+" { $ergebniss = $zahlEins + $zahlZwei }
    "-" { $ergebniss = $zahlEins - $zahlZwei }
    "*" { $ergebniss = $zahlEins * $zahlZwei }
    "/" { $ergebniss = $zahlEins / $zahlZwei }    
}

write-Host "Ihr Resultat betr�gt $ergebniss"
# }
# else {
#     write-Host "Dieser Operator wir nicht erkannt"
# }

Operator überprüfung am anfang
den langen if-else teil durch ein switch-case ersetzt