[BAT] Wykonywanie działań na liczbach

Napisałem coś takiego:

@echo off

echo Program wykona działanie na twoich liczbach

set /p l1="Wpisz liczbę: "

set /p l2="Wpisz liczbę: "

set /p d1="Wybierz działanie: 1 - dodawanie, 2 - odejmowanie, 3 - mnożenie, 4 - dzielenie: "

if "%d1"=="1" goto plus

:plus

set d2=+

if "%d1"=="2" goto minus

:minus

set d2=-

if "%d1"=="3" goto razy

:razy

set d2=*

if "%d1"=="4" goto dziel

:dziel

set d2=/

echo Działanie: %l1%%d2%%l2%

pause

Problem jest przy wybieraniu działania. Obojętnie co wybiorę i tak będzie dzielenie. Co trzeba byłoby zrobić, aby działało to poprawnie?

Popatrz i pomyśl na twój skrypt, masz goto dzielenie jest na końcu. Teraz wiesz co masz źle ? :stuck_out_tongue:

No właśnie on zamiast przeskoczyć idzie po kolei… No to pomyślałem, aby dodać goto end:

@echo off

echo Program wykona działania na twoich liczbach

set /p l1="Wpisz liczbę: "

set /p l2="Wpisz liczbę: "

set /p d1="Wybierz działanie: 1 - dodawanie, 2 - odejmowanie, 3 - mnożenie, 4 - dzielenie: "

if "%d1"=="1" goto plus

:plus

set d2=+

goto end

if "%d1"=="2" goto minus

:minus

set d2=-

goto end

if "%d1"=="3" goto razy

:razy

set d2=*

goto end

if "%d1"=="4" goto dziel

:dziel

set d2=/

goto end

:end

echo Działanie: %l1%%d2%%l2%

pause

Efekt: teraz jest tylko dodawanie :stuck_out_tongue:

Problem polega na tym, że zmienne środowiskowe musisz umieścić pomiędzy dwoma znakami " %", a nie tylko poprzedzić jednym znakiem, jak to zrobiłeś przy okazji operacji porównania.

Po małych przeróbkach kod wygląda tak:

@echo off

echo Program wykona dzialania na twoich liczbach

set /p l1="Wpisz liczbe: "

set /p l2="Wpisz liczbe: "

set /p d1="Wybierz: 1 - dodawanie, 2 - odejmowanie, 3 - mnozenie, 4 - dzielenie: "

if "%d1%"=="1" goto plus

if "%d1%"=="2" goto minus

if "%d1%"=="3" goto razy

if "%d1%"=="4" goto dziel

:plus

set d2=+

goto end

:minus

set d2=-

goto end

:razy

set d2=*

goto end

:dziel

set d2=/

goto end

:end

set /a wynik=%l1%%d2%%l2%

echo Dzialanie: %l1%%d2%%l2%=%wynik%

pause

Dziękuję bardzo za wysiłek. Program nie musiał liczyć, jednak wygląda teraz profesjonalniej :slight_smile: