Script quizz en batch impossible de continuer.pls hlp!

Fermé
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015 - 14 mai 2015 à 00:02
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015 - 15 mai 2015 à 16:13
Salut tout le monde,

Je suis un noob, je viens de toucher au batch. J'ai commencer a créer ce script. Tout va bien jusqu'au moment de répondre à la première question. En effet si je réponds faux ça passe quand même a la question suivante comme si la réponse était juste. De plus ça ne m 'affiche jamais le texte correspondant a la réponse...je comprend franchement pas. ca fait 2 jours que je tourne en rond. J'ai essaye sans le else(QUESTION1 et QUESTION2), en ligne, puis avec le else et en colone(DEBUT)... rien ne fonctionne.
Presque sur que c'est une faute à la con que j'ai fait mais je la vois pas. PLEEEEASE HELP.Merci




@echo off
title Quizz by Pal Sec.
color 0f
echo.
echo.
echo.
echo ********************************
echo WELCOME TO THE PALSECAM'QUIZZ
echo ********************************
ping localhost -n 7 >nul
echo.
echo.
echo.
cls
color 0f
set /p prenom= PRENOM:
echo.
set /p surnom= SURNOM:
echo.
echo.
echo Salut a toi %prenom%,aussi appelle %surnom%!
echo Je crains que tu n'aies pas le niveau pour ce Quizz, %surnom%...
ping localhost -n 8 >nul
echo.
echo Mais bonne chance quand meme!
ping localhost -n 6 >nul
echo.
echo.
echo Qu'est ce que tu attends?...On y va!!
ping localhost -n 7 >nul
echo.
cls
echo 3
ping localhost -n 3 >nul
cls
echo 2
ping localhost -n 3 >nul
cls
echo 1
ping localhost -n 3 >nul
cls
echo GO
ping localhost -n 2 >nul
echo.
pause
echo.
cls
color F0


:DEBUT
echo 1. Quel est la couleur du cheval blanc de Napoléon?
echo.
echo.
echo -A) Noir
echo -B) Blanc
echo -C) On ne connait pas sa couleur.
echo.
echo.
set /p choix1= Veuillez choisir parmis A B C:
if "%choix1%"=="B" (
echo Coup de bol, on passe a la suite...
goto QUESTION 2
) else if "%choix1%"=="A"(
echo Eh non! Go back baby!
goto QUESTION1
) else if "%choix1%"==C (
echo Je t'avais dit que tu n'avais pas le niveau! Recommence!
goto QUESTION1
)


:QUESTION1
cls
echo 1. Quel est la couleur du cheval blanc de Napoléon?
echo.
echo.
echo -A) Noir
echo -B) Blanc
echo -C) On ne connait pas sa couleur.
echo.
echo.
set /p choix1= Veuillez choisir parmis A B C:
if "%choix1%"==B (
echo Coup de bol, on passe a la suite...
goto QUESTION 2
)
if "%choix1%"==C (
echo Je t'avais dit que tu n'avais pas le niveau! Recommence!
goto QUESTION1
)
if "%choix1%"==A (
echo Eh non! Go back baby!
ping localhost -n 5 > nul
goto QUESTION1


:QUESTION2
cls
echo 2. Quel est le fruit prefere du macon?
echo.
echo.
echo -A) La peche
echo -B) La pomme
echo -C) La mure
echo.
echo.
set /p choix2= Veuillez choisir parmis A B C:
if "%choix1%"==b (
echo LOOOOOOSER...
ping localhost -n 5 >nul
goto QUESTION2
)
if "%choix1%"==c (
echo Si j'étais toi je controllerai ou se trouve ma femme..quelle chance!NEXT->
ping localhost -n 5 >nul
goto QUESTION3
)
if "%choix1%"==a (
echo Desolant...
ping localhost -n 5 > nul
goto QUESTION2
)
A voir également:

2 réponses

jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
14 mai 2015 à 17:02
Bonjour,

Sympa comme petit exercice :)

Mais non, ce n'est pas une faute à la con. C'est tout un ensemble de petites choses (à la con) qui s'accumulent.
Il y a tout un tas de détails auxquels il faut faire attention quand on débute.

Tout d'abord
la structure else if condition n'existe pas

Il faut ecrire
IF condition (
instructions
...
) else (
if condition (
instructions
...
)
)

Respecte cette disposition car il peut y avoir des problèmes si certaines instructions ne sont pas en fin de ligne ou si le else n'est pas sur la même ligne que les parenthèses qui l'entourent. L'indentation n'est pas obligatoire mais elle permet de repérer bien mieux la logique du programme.

- Attentions aux espaces :
Il faut toujours mettre un espace entre un mot et une parenthèse ouvrante
Il faut toujours mettre un espace entre une parenthèse fermante et le mot qui la suit
Enfin goto QUESTION 2 ne marche pas si l'étiquette est :QUESTION2

- Ne pas oublier les guillemets indispensables.
La ligne suivante ne donne pas le résultat escompté.
if "%choix%"==B

Il n'y a aucun intérêt de faire deux parties identiques :DEBUT et :QUESTION1
Supprime une des deux et garde :QUESTION1 comme étiquette.

Si tu ne vois jamais le texte des réponses, c'est que tu effaces l'écran sans faire de pause juste après avoir affiché le texte.

- Sur la logique de ton programme :
Tu proposes à chaque fois trois réponses mais la saisie ne limite pas les réponses.
Tu devrais tester si la réponse est bien A, B ou C et sinon insulter la personne qui ne respecte pas les consignes.

Tu devrais aussi regarder du côté de la commande CHOICE qui est spécialement faite pour choisir une option dans un menu.

Je ne parle pas de l'orthographe. Par contre même sous DOS on peut mettre des accents.
Utilise un éditeur de texte qui prenne en charge les jeux de caractères DOS. (OEM 850 ou 863 pour le français)

Bon courage
0
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015
14 mai 2015 à 17:44
Super!!!Merci beaucoup à toi pour la réponse rapide. Je vais devoir relire attentivement ton texte et reprendre en même temps la théorie pq il y a des choses que je n'ai pas du assimilé.(aurais-tu un bon site pour apprendre stp?)

Par contre ce matin en allant à tâtons,j'ai réussi à trouver une combine pour que le IF fonctionne....mais je me dis que pour un script compliqué la méthode que j 'ai utilisé (en parlant des etiquettes et de IF) ca doit faire un immense bordel...non?
N'y aurait-il pas une façon de simplifiée la commande IF que j'ai réalisé dans le texte ci dessous? ou un cheminement autre a suivre???
Merci


@echo off
title Quiz by Pal Sec.
color 0f
echo.
echo.
echo.
echo ********************************
echo WELCOME TO THE PALSECAM'QUIZ
echo ********************************
ping localhost -n 7 >nul
echo.
echo.
echo.
cls
color 0f
set /p prenom= PRENOM:
echo.
set /p surnom= SURNOM:
echo.
echo.
echo Salut a toi %prenom%,aussi appelle %surnom%!
echo Je crains que tu n'aies pas le niveau pour ce Quizz, %surnom%...
ping localhost -n 8 >nul
echo.
echo Mais bonne chance quand meme!
ping localhost -n 6 >nul
echo.
echo.
echo Qu'est ce que tu attends?...On y va!!
ping localhost -n 7 >nul
echo.
cls
echo 3
ping localhost -n 3 >nul
cls
echo 2
ping localhost -n 3 >nul
cls
echo 1
ping localhost -n 3 >nul
cls
echo GO
ping localhost -n 2 >nul
echo.
pause
echo.
cls
color F0
echo 1. Quel est la couleur du cheval blanc de Napoleon?
echo.
echo.
echo a) Noir
echo b) Blanc
echo c) On ne connait pas sa couleur.
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto ERROR11
if "%choix1%"=="b" goto QUESTION2
if "%choix1%"=="c" goto ERROR12

:ERROR11
echo.
echo Je t'avais dit que tu n'avais pas le niveau...Recommence.
ping localhost -n 5 >nul
cls
echo 1. Quel est la couleur du cheval blanc de Napoleon?
echo.
echo.
echo a) Noir
echo b) Blanc
echo c) On ne connait pas sa couleur.
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto QUESTION2
if "%choix1%"=="b" goto ERROR11
if "%choix1%"=="c" goto ERROR12

:ERROR12
echo.
echo ...Tu rigoles la?Retour mon petit!
ping localhost -n 5 >nul
cls
echo 1. Quel est la couleur du cheval blanc de Napoleon?
echo.
echo.
echo a) Noir
echo b) Blanc
echo c) On ne connait pas sa couleur.
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto ERROR11
if "%choix1%"=="b" goto QUESTION2
if "%choix1%"=="c" goto ERROR12

:QUESTION2
echo.
echo Quel bol! On va a la next.
ping localhost -n 5 >nul
cls
echo 2. Quel est le fruit prefere du macon?
echo.
echo.
echo a) La peche
echo b) La pomme
echo c) La mure
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto ERROR21
if "%choix1%"=="b" goto ERROR22
if "%choix1%"=="c" goto QUESTION3

:ERROR21
echo.
echo Tu en es sur?!Pas moi.
ping localhost -n 5 >nul
cls
echo 2. Quel est le fruit prefere du macon?
echo.
echo.
echo a) La peche
echo b) La pomme
echo c) La mure
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto ERROR21
if "%choix1%"=="b" goto ERROR22
if "%choix1%"=="c" goto QUESTION3

:ERROR22
echo.
echo C'est toi la pomme!
ping localhost -n 5 >nul
cls
echo 2. Quel est le fruit prefere du macon?
echo.
echo.
echo a) La peche
echo b) La pomme
echo c) La mure
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto ERROR21
if "%choix1%"=="b" goto ERROR22
if "%choix1%"=="c" goto QUESTION3

:QUESTION3
echo.
echo La chance du debutant...c'est tout!
ping localhost -n 5 >nul
cls
echo 3. Quel est le cri de la fourmi?
echo.
echo.
echo a) La fourmi croonde
echo b) La fourmi crie fort
echo c) La fourmi hurle doucement
echo.
echo.
set /p choix1= Veuillez choisir parmis a/b/c:

if "%choix1%"=="a" goto QUESTION4
if "%choix1%"=="b" goto ERROR31
if "%choix1%"=="c" goto ERROR32
0
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015
14 mai 2015 à 18:11
ahh et j'ai oublié, j'ai remarqué que si maintenant on entre la bonne réponse mais en MAJUSCULE ça mets comme quoi la réponse est fausse. N'y a t il pas un moyen pour corriger cela et que la machine ne prenne pas en considération MAJUSCULE ou pas?merci
0
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
15 mai 2015 à 00:02
Oh la la !
il faut éviter à tout prix d'écrire trois fois chaque questionnaire.
Ça rend le programme confus et difficile à corriger.
La moindre correction doit en effet être faite en triple ce qui multiplie les risques d'erreur.

En fait, puisque chaque questionnaire a la même structure, on a avantage à ne l'écrire qu'une seule fois en tant que sous-programme et de l'appeler autant de fois que nécessaire avec les questions et les réponses appropriées.

En utilisant la commande CHOICE, dont je t'avais parlé tu élimines le problème des majuscules et minuscules. Elle attend une seule touche et n'accepte que celles que tu as choisies sans distinction de majuscules ou minuscules.

Je te donne un modèle dont tu pourras t'inspirer.
Il contient 2 questions et les choix et les messages correspondants.
Toutes les questions, choix et messages doivent être entourés de guillemets.
le paramètre 'réponse' indique la bonne réponse à taper. Pas de guillemets ici

@echo off
cls
echo structure de quizz
rem ------------------------
set question="question No1 Quel est l'age du capitaine"
set ch1="choix A pour question 1"
set ch2="choix B pour question 1"
set ch3="choix C pour question 1"
set m1="message pour choix A question 1 (c'est pas bon, recommence)"
set m2="message pour choix B question 1 (bravo)"
set m3="message pour choix C question 1 (encore rate!)"
set reponse=B
call :test %question% %ch1% %ch2% %ch3% %reponse% %m1% %m2% %m3%

set question="question No2 De quelle couleur sont mes yeux"
set ch1="choix A pour question 2"
set ch2="choix B pour question 2"
set ch3="choix C pour question 2"
set m1="message pour choix A question 2 (eh non!)"
set m2="message pour choix B question 2 (vraiment nul)"
set m3="message pour choix C question 2 (ok coup de bol ?)"
set reponse=C
call :test %question% %ch1% %ch2% %ch3% %reponse% %m1% %m2% %m3%

echo.
echo fin du programme
pause
goto :eof

rem -------------------------------------------------
:test
echo.
pause
cls
echo %~1
echo.
echo %~2
echo %~3
echo %~4
echo.
CHOICE /C ABC /N /M "Choisis entre A,B,C : "
echo.
if errorlevel 3 goto reponseC
if errorlevel 2 goto reponseB
rem reponseA
echo %~6
if %5==A (goto fin) else (goto test)
:reponseB
echo %~7
if %5==B (goto fin) else (goto test)
:reponseC
echo %~8
if not %5==C goto test
:fin
goto :eof



Lance-le pour voir comment ça fonctionne et ensuite remplace les différents paramètres pour chaque question par les données convenables.

Tu remarqueras qu'il est ainsi beaucoup plus facile d'ajouter ou de modifier des questions à ton questionnaire puisqu'elles sont toutes sur le même modèle.

Toute la présentation se fait dans le sous-programme :test
Par fainéantise et parce que ce n'est qu'un simple exemple, je me suis contenté d'une présentation minimum.
Tu as de la marge pour l'améliorer et rétablir les temporisations que j'ai remplacé par une simple pause.
L'avantage, c'est que quand tu améliores la présentation, elle est automatiquement améliorée pour toutes les questions.
0
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015
15 mai 2015 à 14:08
Je te remercie de me consacrer ton temps!!
Oui je me doutais que c'était trop le bordel. J'avais de la peine à me retrouver dans le script. Là, le tiens est propre.
Je crois avoir compris le principe. Au début comme tu le dis tu mets tout ce qui concerne la structure du Quizz (titre,questions, réponses multiples, messages appropriés etc.) Tu sépares les sections grâce au rem -------- afin que la machine détecte la partie "texte" de la partie "commandes" (ma déduction).
Par contre il y a des choses que je ne comprends vraiment pas(pq je n'ai jamais vu, ou appris l'utilité)

- Le % devant un nombre ex.: %5 ou %~5
- goto eof (que veut dire eof?)
- CHOICE /C ABC /N /M (pourrai tu m'expliquer cette commande stp, je ne comprends pas qu'est ce qui fait que majuscule ou minuscule c'est égal)
- call :test %question% %ch1% %ch2% %ch3% %reponse% %m1% %m2% %m3%

Merci
0
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015 > s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015
Modifié par jogadyl le 15/05/2015 à 15:24
Alors là, il va falloir que tu bosses un peu par toi-même.
Pour savoir ce que fait une commande, tu tapes le nom de la commande dans la fenêtre DOS suivi de /? et tu lis les explications.
Tu auras la réponse aux questions que tu poses en tapant
choice /?
call /?
goto /?
if /?
rem /?
etc...
Tu peux avoir une liste des commandes du DOS avec une brève description en tapant simlement HELP sur la ligne de commande.

Fais attention aux détails, le DOS est pénible. goto eof n'est pas la même chose que goto :eof

Bon courage.
0
s696969 Messages postés 5 Date d'inscription mercredi 13 mai 2015 Statut Membre Dernière intervention 15 mai 2015
15 mai 2015 à 16:13
Merci bcp, je vais regarder tout ça!!
0