[RESOLU] Problème de goto sur un programme simple
Modérateur : WIN32-[GG]
[RESOLU] Problème de goto sur un programme simple
Bonjour, cela fait 3 jours que je fais des programmes avec le langage Batch. Je n'ai suivi aucune leçon ni tuto, simplement de la recherche mais je suis bloqué sur un programme. Dans celui-ci, je souhaiterai faire un alphabet automatique, c'est à dire lorsque l'on met une lettre (exemple : la lettre A), cela met la suite de l'alphabet sur la même ligne. Mais lors de la commande if%lettre%= A goto LETTREA, le goto est décrit comme inattendu lors du test du programme. Voici mon programme terminé mais avec des fautes, je ne sais lesquelles .
@echo off
color f0
title Alphabet Automatique V.2
:START
echo Veuillez entrer une lettre en MAJUSCULE.
echo Pour arreter le programme, veuillez ecrire "STOP".
set /p %debut%=
if%debut%=STOP goto END
set /p %lettre%=
if%lettre%=A goto LETTREA
if%lettre%=B goto LETTREB
if%lettre%=C goto LETTREC
if%lettre%=D goto LETTRED
if%lettre%=E goto LETTREE
if%lettre%=F goto LETTREF
if%lettre%=G goto LETTREG
if%lettre%=H goto LETTREH
if%lettre%=I goto LETTREI
if%lettre%=J goto LETTREJ
if%lettre%=K goto LETTREK
if%lettre%=L goto LETTREL
if%lettre%=M goto LETTREM
if%lettre%=N goto LETTREN
if%lettre%=O goto LETTREO
if%lettre%=P goto LETTREP
if%lettre%=Q goto LETTREQ
if%lettre%=R goto LETTRER
if%lettre%=S goto LETTRES
if%lettre%=T goto LETTRET
if%lettre%=U goto LETTREU
if%lettre%=V goto LETTREV
if%lettre%=W goto LETTREW
if%lettre%=X goto LETTREX
if%lettre%=Y goto LETTREY
if%lettre%=Z goto LETTREZ
:LETTREA
timeout /t 2 /nobreak>nul
echo -1 B
goto LETTREB
:LETTREB
timeout /t 2 /nobreak>nul
echo -1 C
goto LETTREC
:LETTREC
timeout /t 2 /nobreak>nul
echo -1 Faire la meme chose avec toutes les lettres ...
goto LETTREZ
:LETTREZ
timeout /t 2 /nobreak>nul
echo Il n'y a pas d'autre lettres dans l'alphabet.
pause>nul
goto START
:END
@echo off
color f0
title Alphabet Automatique V.2
:START
echo Veuillez entrer une lettre en MAJUSCULE.
echo Pour arreter le programme, veuillez ecrire "STOP".
set /p %debut%=
if%debut%=STOP goto END
set /p %lettre%=
if%lettre%=A goto LETTREA
if%lettre%=B goto LETTREB
if%lettre%=C goto LETTREC
if%lettre%=D goto LETTRED
if%lettre%=E goto LETTREE
if%lettre%=F goto LETTREF
if%lettre%=G goto LETTREG
if%lettre%=H goto LETTREH
if%lettre%=I goto LETTREI
if%lettre%=J goto LETTREJ
if%lettre%=K goto LETTREK
if%lettre%=L goto LETTREL
if%lettre%=M goto LETTREM
if%lettre%=N goto LETTREN
if%lettre%=O goto LETTREO
if%lettre%=P goto LETTREP
if%lettre%=Q goto LETTREQ
if%lettre%=R goto LETTRER
if%lettre%=S goto LETTRES
if%lettre%=T goto LETTRET
if%lettre%=U goto LETTREU
if%lettre%=V goto LETTREV
if%lettre%=W goto LETTREW
if%lettre%=X goto LETTREX
if%lettre%=Y goto LETTREY
if%lettre%=Z goto LETTREZ
:LETTREA
timeout /t 2 /nobreak>nul
echo -1 B
goto LETTREB
:LETTREB
timeout /t 2 /nobreak>nul
echo -1 C
goto LETTREC
:LETTREC
timeout /t 2 /nobreak>nul
echo -1 Faire la meme chose avec toutes les lettres ...
goto LETTREZ
:LETTREZ
timeout /t 2 /nobreak>nul
echo Il n'y a pas d'autre lettres dans l'alphabet.
pause>nul
goto START
:END
Modifié en dernier par Synesis le 31 mars 2017 19:19, modifié 1 fois.
-
- Batcheur occasionnel
- Messages : 6
- Enregistré le : 29 mars 2017 11:52
Re: (Débutant) Problème de goto sur un programme simple
bonjour,
il faut pas mettre de % quand tu crées une variable.
remplace doncpar
tes lignes de comparaisons ne vont pas non plus.
il faut mettre un espace entre if et le nom de la variable et ne pas oublier de mettre deux fois le signe =
comme ceci
il faut pas mettre de % quand tu crées une variable.
remplace donc
Code : Tout sélectionner
set /p %debut%=
Code : Tout sélectionner
set /p debut=
il faut mettre un espace entre if et le nom de la variable et ne pas oublier de mettre deux fois le signe =
comme ceci
Code : Tout sélectionner
if %lettre%==A goto LETTREA
if %lettre%==B goto LETTREB
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: (Débutant) Problème de goto sur un programme simple
Bonjour,
Ca ne répond pas directement à ta question mais ça peut te faire progresser, voilà une version plus courte :
Ca ne répond pas directement à ta question mais ça peut te faire progresser, voilà une version plus courte :
Code : Tout sélectionner
@echo off
color f0
title Alphabet Automatique V.3
:START
cls
echo Veuillez entrer une lettre en MAJUSCULE.
echo Pour arreter le programme, veuillez ecrire "STOP".
set /p saisie=
if /i "%saisie%"=="STOP" goto :eof
:: on ne récupère qu'un seul caractère dans le cas où la saisie serait composée de plusieurs lettres
set saisie=%saisie:~-1%
:: on vérifie que la lettre saisie soit bien une majuscule
echo %saisie% | findstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" > nul || goto START
:: on utilise la lettre saisie pour découper l'alphabet en deux parties (%%A et %%B)
for /f "tokens=1,2 delims=%saisie%" %%A in ('echo ABCDEFGHIJKLMNOPQRSTUVWXYZ') do (cls & echo %saisie%%%B)
pause
exit
Modifié en dernier par barnabe0057 le 02 avr. 2017 02:19, modifié 1 fois.
Re: (Débutant) Problème de goto sur un programme simple
Merci let's have fun pour cette réponse, j'ai modifié ça et tout fonctionne
Et Barnabé, tes commentaires dans le programme sont utiles mais j'essaie d'apprendre l'utilité de chaque formule pour ensuite bien les utiliser. Dans ton programme, malgré les commentaires, je ne sait pas quelle commande fais quelle action. Si tu pouvais me donner plus d'informations sur celles-ci, ça serait génial
Et Barnabé, tes commentaires dans le programme sont utiles mais j'essaie d'apprendre l'utilité de chaque formule pour ensuite bien les utiliser. Dans ton programme, malgré les commentaires, je ne sait pas quelle commande fais quelle action. Si tu pouvais me donner plus d'informations sur celles-ci, ça serait génial
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: [RESOLU] Problème de goto sur un programme simple
Difficile pour moi d'expliquer plus en détails mais je vais essayer :
==>> on découpe la variable %saisie%, la valeur -1 signifie qu'on part de la fin et qu'on récupère un seul caractère, par exemple si %saisie% vaut ghrNKjOsdRY on la découpe et on obtient Y
==>> on affiche (echo) la valeur de la variable %saisie% dans laquelle on recherche (findstr) une lettre majuscule, si la condition n'est pas remplie (||), c'est-à-dire si on ne trouve pas de majuscule, on retourne (goto) au label START
==>> on affiche (echo) une chaîne de caractères représentant l'alphabet, on définit 2 tokens donc 2 variables, %%A qui récupère la valeur de tokens=1 et %%B qui récupère la valeur de tokens=2
==>> on choisit comme délimiteur la lettre saisie au clavier, puis on utilise ce délimiteur pour couper en 2 l'alphabet, %%A récupère la partie gauche de l'alphabet et %%B récupère la partie droite
Je ne sais pas si j'ai été assez clair, si tu as des questions précises n'hésite pas.
Code : Tout sélectionner
set saisie=%saisie:~-1%
Code : Tout sélectionner
echo %saisie% | findstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" > nul || goto START
Code : Tout sélectionner
for /f "tokens=1,2 delims=%saisie%" %%A in ('echo ABCDEFGHIJKLMNOPQRSTUVWXYZ') do (cls & echo %saisie%%%B)
==>> on choisit comme délimiteur la lettre saisie au clavier, puis on utilise ce délimiteur pour couper en 2 l'alphabet, %%A récupère la partie gauche de l'alphabet et %%B récupère la partie droite
Je ne sais pas si j'ai été assez clair, si tu as des questions précises n'hésite pas.