Was ist an diesem batch/cmd program falsch?
Ich habe einen Taschenrechner Programiert, der, wenn man am ende Enter drückt, das Ergebnis der vorheriegen Rechenoperation als Zahl eins nehmen soll oder wenn man c drück, die erste Zahl überschreiben soll. Nun ist es aber so, das er nicht zu :A wechelt, wenn man Enter drückt, sondern das Program schliest, wo ist der Fehler?
4 Antworten
Hier mal noch eine Ergänzung für den Rechner selbst. Umgehe mit der gedrückten Taste die Rückkehr zu "mystart".
@echo off
:mystart
echo Taschenrechner
echo Gib eine Berechnung ein
echo Beispiel: 4+1*8
set /p formel= Eingabe:
set /a ergebnis=%formel%
echo.
echo Das Ergebnis ist:
echo %ergebnis%
echo.
echo Press any key to return to the main menu
pause>nul
cls
goto mystart
Wie du den Fehler schnell behebst (zurücksetzen von Klick und verwenden von "") wurde ja schon gezeigt. Allerdings ist dies eine gute Stelle um choice zu verwenden.
Knapp formuliert könnte das dann so aussehen:
@echo off
:main
set /p "operand1=Erster Operand: "
:loop
set /p "operator=Operator (+-/*): "
set /p "operand2=Zweiter Operand: "
set /a operand1 %operator%= operand2
echo:=%operand1%
choice /m "[f]ortfahren oder [n]eu beginnen" /c fn
if errorlevel 2 goto main
if errorlevel 1 goto loop
Da der Nutzer in vielen Fällen einfach auch mal gerne nur auf eine frage Enter drückt gibt es die Möglichkeit für set /p einen Defaultwert festzulegen, indem man die Variable vor der Abfrage belegt.
set "var=blubb"
set /p "var=press Enter...: "
echo %var%
pause
...das was eigentlich zum Vorteil gereicht , lässt Dein Programm unerwartet reagieren denn die Variable %klick% ist nach der ersten Eingabe von "c" biss zur Eingabe eines anderen nicht leeren Wertes mit c belegt. (es wäre nützlich wenn man das echo off gelegentlich weglässt, dann sieht man was abläuft )
:@echo off
chcp 65001 >nul & rem Umlaute anzeigen
:a
echo hier is a
:b
echo hier is b
rem variable löschen (vordefinierter Zustand nichts "" )
set "klick="
set /p "klick=drücke c[enter] oder nur enter"
if "%klick%"=="c" goto :b
rem geht auch bei allen anderen Eingaben nach :a
goto :a
pause
Das Enter ohne ein vorheriges Zeichen wird das Verhalten auslösen.
Nutze dafür einen Standardwert, um dieses Problem zu umgehen.
echo .
set /a Klick=''
set /p Klick=Druecken ...