mercredi 20 janvier 2021

Issues with multiple If and Else If statements in command line

Essentially I'm working on a project in command line, and I'm trying to have multiple if statements with multiple conditions to end up with something, in this case, echo displaying something. Here's an example:

if %piece%==1 if %haut%==1 (
    if %couleur%==1 (
        echo haut 1 1 1
) else if %couleur%==2 (
        echo haut 1 1 2
)) 
if %piece%==1 if %haut%==2 (
    if %couleur%==1 (
        echo haut 1 2 1
) else if %couleur%==2 (
        echo haut 1 2 2
))

Now this works fine, displaying what's shown beside echo, and when I add a second one, it also works fine, like so:

if %piece%==1 if %haut%==1 (
    if %couleur%==1 (
        echo haut 1 1 1
) else if %couleur%==2 (
        echo haut 1 1 2
)) 
if %piece%==1 if %haut%==2 (
    if %couleur%==1 (
        echo haut 1 2 1
) else if %couleur%==2 (
        echo haut 1 2 2
))

if %piece%==2 if %haut%==1 (
    if %couleur%==1 (
        echo haut 2 1 1
) else if %couleur%==2 (
        echo haut 2 1 2
)) 
if %piece%==2 if %haut%==2 (
    if %couleur%==1 (
        echo haut 2 2 1
) else if %couleur%==2 (
        echo haut 2 2 2
))

But once I add a third one which has a different second condition, instead of haut it's pantalon, it suddenly crashes the program instead of giving the answer.

if %piece%==1 if %haut%==1 (
    if %couleur%==1 (
        echo haut 1 1 1
) else if %couleur%==2 (
        echo haut 1 1 2
)) 
if %piece%==1 if %haut%==2 (
    if %couleur%==1 (
        echo haut 1 2 1
) else if %couleur%==2 (
        echo haut 1 2 2
))

if %piece%==2 if %haut%==1 (
    if %couleur%==1 (
        echo haut 2 1 1
) else if %couleur%==2 (
        echo haut 2 1 2
)) 
if %piece%==2 if %haut%==2 (
    if %couleur%==1 (
        echo haut 2 2 1
) else if %couleur%==2 (
        echo haut 2 2 2
))

if %piece%==3 if %pantalon%==1 (
    if %couleur%==1 (
        echo pantalon 3 1 1
) else if %couleur%==2 (
        echo pantalon 3 1 2
)) 
if %piece%==3 if %pantalon%==2 (
    if %couleur%==1 (
        echo pantalon 3 2 1
) else if %couleur%==2 (
        echo pantalon 3 2 2
))

I've also tried doing it without the else if, and just having many if statements stacked, but the same problem arises. I'll add the entire code at the end just in case it's needed, but I really don't know what the issue is here and why this is being caused. If someone could help me out, it'd be really appreciated!

Here's the full code:

@echo off

:menu
cls
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quelle piece vestimentaire voulez-vous?
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo -------
echo Hommes
echo -------
echo Haut (1)
echo.
echo Haut (2)
echo.
echo Pantalon (3)
echo.
echo -------
echo Femmes/Tous genres confondus
echo -------
echo Haut (4)
echo.
echo Jupe (5)
echo.
echo Pantalon (6)
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
set /p piece=

if %piece%==1 goto haut
if %piece%==2 goto haut
if %piece%==3 goto pantalon
if %piece%==4 goto haut
if %piece%==5 goto jupe
if %piece%==6 goto pantalon

:haut
cls
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quelle style d'haut voulez-vous?
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Haut (1)
echo.
echo Haut (2)
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set /p haut=

goto couleur

:pantalon
cls
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quelle style de pantalon voulez-vous?
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Pantalon (1)
echo.
echo Pantalon (2)
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set /p pantalon=

goto couleur

:jupe
cls
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quelle style de jupe voulez-vous?
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Jupe (1)
echo.
echo Jupe (2)
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
set /p jupe=

goto couleur

:couleur
cls
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Quelle couleurs voulez-vous?
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Rouge et noir (1)
echo.
echo Blue et noir (2)
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo.
set /p couleur=

:export
cls

if %piece%==1 if %haut%==1 (
    if %couleur%==1 (
        echo haut 1 1 1
) else if %couleur%==2 (
        echo haut 1 1 2
)) 
if %piece%==1 if %haut%==2 (
    if %couleur%==1 (
        echo haut 1 2 1
) else if %couleur%==2 (
        echo haut 1 2 2
))

if %piece%==2 if %haut%==1 (
    if %couleur%==1 (
        echo haut 2 1 1
) else if %couleur%==2 (
        echo haut 2 1 2
)) 
if %piece%==2 if %haut%==2 (
    if %couleur%==1 (
        echo haut 2 2 1
) else if %couleur%==2 (
        echo haut 2 2 2
))

if %piece%==3 if %pantalon%==1 (
    if %couleur%==1 (
        echo pantalon 3 1 1
) else if %couleur%==2 (
        echo pantalon 3 1 2
)) 
if %piece%==3 if %pantalon%==2 (
    if %couleur%==1 (
        echo pantalon 3 2 1
) else if %couleur%==2 (
        echo pantalon 3 2 2
))

if %piece%==4 if %haut%==1 (
    if %couleur%==1 (
        echo haut 4 1 1
) else if %couleur%==2 (
        echo haut 4 1 2
)) 
if %piece%==4 if %haut%==2 (
    if %couleur%==1 (
        echo haut 4 2 1
) else if %couleur%==2 (
        echo haut 4 2 2
))

if %piece%==5 if %jupe%==1 (
    if %couleur%==1 (
        echo haut 4 1 1
) else if %couleur%==2 (
        echo haut 4 1 2
)) 
if %piece%==5 if %jupe%==2 (
    if %couleur%==1 (
        echo haut 4 2 1
) else if %couleur%==2 (
        echo haut 4 2 2
))

pause>nul
goto menu

If there's any other information you need I'll be happy to give it!

Aucun commentaire:

Enregistrer un commentaire