0
votes

Problèmes Batch Leq & Geq

Donc, je fais un projet de lot, sans idées, mais je le fais juste pour le plaisir, j'essaie de le faire, donc si vous n'êtes pas âgé ou plus, cela dit que vous pouvez continuer, sinon vous pouvez continuer. , si je tape moins de 16 ans, cela fonctionne bien, si je fais plus vieux ou égal à 16, il retourne aux deux messages ...

echo Core 0.0.1
echo By Supergrupgr
echo SpukkitDev 2020
echo Hit a key to continue
pause>nul
echo What is your age
set /p age=
goto determine
:determine
if %age% GEQ 16 goto oldenough
if %age% LEQ 15 goto min
:oldenough
echo You are old enough... What will you now do.
:min
echo You are not old enough... Leave.
pause


4 commentaires

Voir goto /? et lire le dernier paragraphe.


L'exécution se poursuit juste après Echo Vous êtes assez vieux ... Sauf si vous ne le disons de ne pas le faire ...


Lire Aide appeler et Aide si . Si 16 est l'âge de coupure, alors 15 ne figure pas dans le problème.


Un goto n'est pas un appel à une fonction. Il suffit d'exécuter l'exécution du programme sur cette étiquette dans le code et continue d'exécuter tout le code à partir de là. À peu près à quel point le goto fonctionne dans chaque langue qui l'utilise depuis l'aube de l'ordinateur.


3 Réponses :


0
votes

Les fichiers de lots font simplement passer à la marque que vous avez spécifiée dans le goto

Il continue ensuite à exécuter de là. Il ne saute pas l'étiquette suivante.

Deux solutions:

  1. ajoutez plus de conditions et plus goto déclarations
  2. Mettez les sous-programmes dans des fichiers de lots distincts et utilisez appel pour les exécuter

3 commentaires

Ouais mais ça ne devrait pas exécuter le prochain goto parce que "l'âge" est supérieur à 15


il n'exécute qu'un goto mais tombe à travers une étiquette à la prochaine


Il suffit d'ajouter si% ÂGE% GEQ 16 GOTO FIND Après echo Vous êtes assez vieux et ajoutez une étiquette de fin à la fin



0
votes

Voici un exemple de mise en page pour vous aider:

@Echo Off
Echo Core 0.0.1
Echo By Supergrupgr
Echo SpukkitDev 2020
"%__AppDir__%timeout.exe" /T 5
Set "age=0"
Set /P "age=What is your age? >"
If %age% Lss 16 (
    Echo=
    Echo You are not old enough... Leave.
    Echo=
    "%__AppDir__%timeout.exe" /T 3 /NoBreak 1> NUL
    Exit /B 1
)
Echo You are old enough... What will you now do?
"%__AppDir__%timeout.exe" /T 3 1> NUL


1 commentaires

@jwdonahue, la réponse a été initialement fournie pour montrer une méthodologie particulière, que je pense qu'elle a. Je l'ai fait parce que les suggestions à l'époque suggèrent l'utilisation de appel et / ou goto , qui ajoutent tous deux un surcharge inutile. C'est un wiki communautaire, n'hésitez pas à apporter des améliorations / ajouts ou simplement regarder la syntaxe utilisée pour formater la réponse.



0
votes

Tout d'abord, nous écrivons l'algorithme: xxx

écrit que dans le code ressemble à quelque chose comme: xxx

note: je n'ai pas fait de Beaucoup de tests à ce sujet, mais je pense que tous les chemins de code au moins une fois. Donnez-le un essai.

voir Aide SetLocal , Aide pour , Aide Appeler , Aide goto , Aide si et Aide Quitter , pour en savoir plus sur le code ci-dessus.

Notes stylistiques:

  • J'utilise les symboles @ tout au long, plutôt que d'un @echo off car il est plus composé d'autres scripts et facilite le débogage ciblé.
  • J'utilise un style différent de noms d'étiquettes pour goto cibles que appel cibles.
  • J'évite d'utiliser des blocs de code multiligne (plus d'une ligne entre Paren) comme la peste.

0 commentaires