IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

"4 était inattendu"


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut "4 était inattendu"
    Salut à tous,

    Voilà ce que je dois faire:

    Travail à faire : Ecrire un script intitulé jeu qui consiste à faire trouver par l'utilisateur la valeur d'un entier x en un nombre limité de coups.

    Si l'utilisateur saisit une valeur supérieure à x on affichera "trop grand", si elle est inférieure on affichera "trop petit" et enfin si l'utilisateur trouve la valeur exacte on affichera "gagne !!". A chaque essai on affichera également le nombre d'essais restants. A la fin si l'utilisateur n'a pas trouvé x on affichera "perdu !!".

    Le nombre d'essais sera fixé par une variable nbcoups et la valeur de x sera tirée aléatoirement grâce à la variable système RANDOM. Utilisez le modulo pour réduire l'intervalle du tirage.

    Exemple: si x entre [0,20] alors nbcoups=5


    et voilà ce que j'ai fait:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @écho off
    cls
    
    
    set x=%RANDOM%
    set nbcoups=5
    
    :début
    set /p val=Saisir un nombre entier entre 0 et 20 inclus:
    if i/ %val% GTR %x% echo Trop grand… & goto cprest
    if i/ %val% LSS %x% echo Trop petit & goto cprest
    if i/ %val% EQU %x% echo Gagné !!! & goto fin
    
    :cprest
    set /a nbcoups=%nbcoups%-1
    if i/ %nbcoups% GTR 0 echo Il vous reste %nbcoups% coups… & goto début
    if i/ %nbcoups% EQU 0 echo Perdu !!!
    
    :fin

    le problème, c'est que ça m'affiche "Trop grand..." ou "Trop petit" mais après ça m'affiche "4 était innatendu".

    Donc voilà, j'ai 2 problèmes en somme: le script bug au niveau de "set /a nbcoups=%nbcoups%-1" je pense, et j'aimerai aussi que random pioche dans l'intervalle [0 ; 20] et pas dans l'intervalle [0 : 32767]...

    Merci d'avance pour vos futurs réponses, bye

  2. #2
    Inactif  
    Avatar de Aitone
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3 562
    Par défaut
    Salut,

    Au début tu déclare "coups" puis ensuite tu te sers de "nbcoups"

    Déclare nbcoups directement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    excuse, j'ai fait une faute de frappe...En fait j'ai bien mis "nbcoups=5" au début, et d'ailleurs, il m'affiche bien le résultat du calcul %nbcoups%-1, mais il me 4 était inattendu...Et après du coup il retourne pas à l'étiquette début...
    Pourquoi?

  4. #4
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    salut Itach et bienvenue à toi sur le forum.

    tes erreurs se trouvaient essentiellement sur les paramètres de «if»

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @echo off
    cls
    
    
    set /a x=%random%%%21
    set nbcoups=5
    
    :début
    set /p val=Saisir un nombre entier entre 0 et 20 inclus:
    if /i %val% GTR %x% echo Trop grand… & goto cprest
    if /i %val% LSS %x% echo Trop petit & goto cprest
    if /i %val% EQU %x% echo Gagné !!! & goto fin
    
    :cprest
    set /a nbcoups=%nbcoups%-1
    if /i %nbcoups% GTR 0 echo Il vous reste %nbcoups% coups… & goto début
    if /i %nbcoups% EQU 0 echo Perdu !!!, il fallait trouver %x%
    
    :fin
    Tu peux encore l'améliorer.

    Bonne continuation.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    Merci max pour ta réponse, mais il me met toujours 4 était innatendu...Je comprend pas pourquoi, pourtant il fait le calcul, car il écrit la valeur 4, mais je ne sais pas ce que ça veut dire "était innatendu", de plus, après plus rien ne ce passe...
    Une autre idée?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    Petite précision étrange que je viens de constater:
    Ce fichier Jeu.bat que j'ai créé, je l'au fait avec l'éditeur de texte du DOS.
    Etrangement, quand je le fais avec le bloc_notes, cette erreur n'apparait plus, le programme revient bien au début, mais par contre, on a toujours 5 coups...
    Quelqu'un peut-il m'expliquer toutes ces bizarrerie...

  7. #7
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 379
    Billets dans le blog
    1
    Par défaut
    Très probablement l'encodage. Tu utilises des labels avec des lettres accentuées dedans, et la ligne de commande utilise un encodage différent des programmes graphiques. Je te conseillerai déjà de remplacer tes "début" par "debut".

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    Merci Anomaly, mais ça ne change rien, ça me donne par exemple:

    Saisir un nombre entre 0 et 20 inclus:5
    Trop petit...
    4 était inattendu

    Autres suggestions?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    J'ai trouvé!!!
    En enlevant les "/i" quant on teste la valeur de "nbcoups" ça marche!!!
    Je ne sais pas du tout pourquoi, mais ça fonctionne!!!
    En tout cas, merci à tous ceux qui m'ont aidé

    P.S.: si quelqu'un connaît la raison qui explique ce changement, qu'il la poste...

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @echo off
    cls
     
    set /a x=%random%%%21
    set /a nbcoups=5
    :debut
    set val=
    set /p val="Saisir un nombre entier entre 0 et 20 inclus :"
    if "%val%"==" " goto Debut
    Set Tmp=
    Set /a Tmp=%Val% 2>null
    if %errorlevel% GTR 0 goto Debut
    if not %Tmp% == %Val%  goto debut
    if %val% GTR %x% echo Trop grand. &  goto cprest
    if %val% LSS %x% echo Trop petit.  & goto cprest
    if %val% EQU %x% echo Gagn‚ !!!  & goto fin
    :cprest
    set /a nbcoups=%nbcoups%-1
    if %nbcoups% GTR 0 echo Il vous reste %nbcoups% coups. & goto debut
    if %nbcoups% EQU 0 echo Perdu !!!, il fallait trouver %x%.
    :fin
    La variable Val n'était pas RAZ après chaque saisie et quitte à gérer des nombres autant la convertir avant de tester le contenu, les caractères espace, return et tab par exemple posaient pb ainsi que la saisie d'une lettre ou d'une chaine.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    Merci

  12. #12
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    je pense que tu as simplement encore écrit

    if i/ au lieu de if /i ou quelques autres erreurs de frappe du même genre.

    Quoi qu'il en soit, le paramètre «/i» n'est pas indispensable et ne change rien dans ce contexte.

    Aussi, que tu utilises l'éditeur EDIT (oem) ou notepad (ansi), hormis l'affichage des caractères (qui peut changer suivant l'interpréteur de commande utilisé), cela n'affecte en rien le déroulement normal du script.

    fait attention quand même, cmd est rancunier si tu oublies le


  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    Oki ba merci à tous une nouvelle fois, je le met en résolu...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur "3 était inattendu" .bat ?
    Par yaumme dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 11/04/2008, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo