Page 1 sur 1

[RESOLU] Problème de goto sur un programme simple

Posté : 18 mars 2017 23:12
par Synesis
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 :cry: .

@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

Re: (Débutant) Problème de goto sur un programme simple

Posté : 29 mars 2017 15:20
par letshavefun
bonjour,
il faut pas mettre de % quand tu crées une variable.
remplace donc

Code : Tout sélectionner

set /p %debut%=
par

Code : Tout sélectionner

set /p debut=
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

Code : Tout sélectionner

if %lettre%==A goto LETTREA
if %lettre%==B goto LETTREB

Re: (Débutant) Problème de goto sur un programme simple

Posté : 29 mars 2017 22:34
par barnabe0057
Bonjour,

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

Re: (Débutant) Problème de goto sur un programme simple

Posté : 31 mars 2017 19:14
par Synesis
Merci let's have fun pour cette réponse, j'ai modifié ça et tout fonctionne :D
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 :)

Re: [RESOLU] Problème de goto sur un programme simple

Posté : 01 avr. 2017 22:41
par barnabe0057
Difficile pour moi d'expliquer plus en détails mais je vais essayer :

Code : Tout sélectionner

set saisie=%saisie:~-1%
==>> 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


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
==>> 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


Code : Tout sélectionner

for /f "tokens=1,2 delims=%saisie%" %%A in ('echo ABCDEFGHIJKLMNOPQRSTUVWXYZ') do (cls & echo %saisie%%%B)
==>> 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.