Witam,
napisałem taki o to kalkulator w batchu:
@echo off
color 0a
title Kalkulator
:start
echo +++++++++++++++++++++++++++++++++++
echo Kalkulator
echo +++++++++++++++++++++++++++++++++++
cls
set /p l1="Wpisz 1 liczbe:"
set /p l2="Wpisz 2 liczbe:"
echo 1 - dodawanie, 2 - odejmowanie, 3 - mnozenie, 4 - dzielenie, 5 - powrot:
choice /c 12345 /M "Wybierz 1, 2, 3, 4 lub 5"
if errorlevel == 5 (
cls
goto start
)
if errorlevel == 4 (
cls
set d2=/
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start
)
if errorlevel == 3 (
cls
set d2=*
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start
)
if errorlevel == 2 (
cls
set d2=-
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start
)
if errorlevel == 1 (
cls
set d2=+
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start
)
Problem w tym, że niestety nie liczy prawidłowo, np. 2*5=105. Proszę o pomoc, z góry dziękuję i pozdrawiam.
Coś jest z tym choice
i/lub errorlevel
, bo działa jak zrobię to na set
i goto
:
Raczej z “blokowymi” if
-ami: https://stackoverflow.com/a/14190037, obejść problem można po przez przebudowanie if
-ów czy jak ktoś zauważył - używając “opcje spowalniającą”.
kod przepisany na użycie "goto
" (kliknij aby zobaczyć)
@ECHO off
COLOR 0a
TITLE Kalkulator
:start
ECHO +++++++++++++++++++++++++++++++++++
ECHO Kalkulator
ECHO +++++++++++++++++++++++++++++++++++
CLS
SET /p l1="Wpisz 1 liczbe:"
SET /p l2="Wpisz 2 liczbe:"
ECHO 1 - dodawanie (+), 2 - odejmowanie (-), 3 - mnozenie(*), 4 - dzielenie(/), inne - powrot:
SET /p math="Wybierz 1, 2, 3, 4 lub 5 "
IF '%math%' == '1' GOTO 1
IF '%math%' == '+' GOTO 1
IF '%math%' == '2' GOTO 2
IF '%math%' == '-' GOTO 2
IF '%math%' == '3' GOTO 3
IF '%math%' == '*' GOTO 3
IF '%math%' == '4' GOTO 4
IF '%math%' == '/' GOTO 4
GOTO start
:4
CLS
SET d2=/
SET /a wynik=%l1%%d2%%l2%
ECHO Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
CLS
GOTO start
:3
CLS
SET d2=*
SET /a wynik=%l1%%d2%%l2%
ECHO Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
CLS
GOTO start
:2
CLS
SET d2=-
SET /a wynik=%l1%%d2%%l2%
ECHO Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
CLS
GOTO start
:1
CLS
SET d2=+
SET /a wynik=%l1%%d2%%l2%
ECHO Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
CLS
GOTO start
:exit
1 polubienie
https://www.computerhope.com/issues/ch001674.htm - jakbyś chciał sprawdzić co powoduje błąd z choice
/ errorlevel
Możliwe, że mimo prób nadpisania zmiennych te odświeżają się za 2-3 wpisaniem tego samego (np. za 3 razem pokazuje poprawnie mnożenie i wynik a za drugim jak zmienię cyfry na inne bez zmiany wykonywanego działania).
echo %errorlevel% %d2% %wynik%
jak sprawdzałem to pokazują stare i za 2-3 razem liczą poprawnie.
Wyciąłem liczenie z if
poza i w sumie też rusza:
@echo off
color 0a
title Kalkulator
:start
echo +++++++++++++++++++++++++++++++++++
echo Kalkulator
echo +++++++++++++++++++++++++++++++++++
cls
set /p l1="Wpisz 1 liczbe:"
set /p l2="Wpisz 2 liczbe:"
echo 1 - dodawanie, 2 - odejmowanie, 3 - mnozenie, 4 - dzielenie, 5 - powrot:
choice /c:12345 /M "Wybierz 1, 2, 3, 4 lub 5"
if errorlevel == 5 (
goto start
)
if errorlevel == 4 (
set d2=/
goto oblicz
)
if errorlevel == 3 (
set d2=*
goto oblicz
)
if errorlevel == 2 (
set d2=-
goto oblicz
)
if errorlevel == 1 (
set d2=+
goto oblicz
)
:oblicz
cls
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start
if
wtedy można uprościć do:
if errorlevel == 5 goto start
if errorlevel == 4 set d2=/
if errorlevel == 3 set d2=*
if errorlevel == 2 set d2=-
if errorlevel == 1 set d2=+
cls
set /a wynik=%l1%%d2%%l2%
echo Dzialanie: %l1%%d2%%l2%=%wynik%
pause>nul
cls
goto start