Как исправить проблему с переходом в командный файл - PullRequest
0 голосов
/ 05 января 2019

Я начал изучать программирование несколько дней назад, и вот я со своими первыми проблемами. Я кое-что узнаю о пакетном режиме, но в моем коде есть что-то неправильное, вы можете мне помочь с этим?

В частности, команда "goto" - это не go. Я пытался поместить это в одну строку, но похоже, что goto не существует. как я могу это исправить?

@echo off
:INIZIO
set /p "risp=Scegli un pokemon tra: Pikachu, Charizard e Blastoid:"
if [%risp%]=="pikachu" goto UNO
if [%risp%]=="charizard" goto UNO
if [%risp%]=="blastoid" goto UNO
:UNO
echo Bella scelta!
echo Vuoi attaccare o fuggire?
set/P risp= 
if [%risp%]=="attaccare" goto battaglia 1 
if [%risp%]=="fuggire" goto perdita
set/P risp=
:battaglia 1
echo e allora combattiamo!
echo Vuoi fare un attacco leggero o pesante?
set/P risp=
if [%risp%]==[leggero] echo il nemico sopravvive! ti attacca e il tuo pokemon muore! 
goto morte
if [%risp%]==[pesante] echo È superefficace, il pokèmon muore qui davanti!
goto win
:morte
set /p "risp=Continuare?
if [%risp%]=="si" echo e allora andiamo!
goto replay
if [%risp%]=="no" echo hai fallito la tua missione!
goto lose
:replay
set /p "risp=Scegli un pokemon tra:onix e reshiram:"
if [%risp%]=="onix" goto DUE 
if [%risp%]=="reshiram" goto DUE
:DUE
echo Vuoi attaccare o fuggire?
set /p "risp=
if [%risp%]==[attaccare] echo e allora combattiamo!
goto battaglia 2
if [%risp%]==[fuggire] echo sei riuscito a fuggire correndo all'impazzata
:battaglia 2
echo Vuoi fare un attacco leggero o pesante?
set /p "risp=
if [%risp%]==[pesante] echo È superefficace, il pokèmon muore qui davanti!
goto win
if [%risp%]==[leggero] echo il nemico non muore, ma la sua mossa non ti sfiora neanche
goto battaglia 2
:win
echo congratulazioni, hai vinto la tua prima battaglia!
pause
:perdita
echo sei scappato, ma non è ancora finita per te. preparati ad altri combattimenti in futuro!

Я надеюсь, что вы можете помочь мне с этим, но мне нужно больше узнать о программировании. спасибо за помощь!

1 Ответ

0 голосов
/ 05 января 2019

Без дополнительной информации я думаю, что ваша проблема не в goto командах, а в if условных выражениях

Предположим, пользователь вводит pikachu в первом приглашении. Когда будет достигнут первый if, парсер пакета заменит операцию чтения переменной %risp% значением внутри переменной. Итак, ваша линия

if [%risp%]=="pikachu" goto UNO

выполняется как

if [pikachu]=="pikachu" goto UNO

Вы можете видеть, что [pikachu] не равно "pikachu", поэтому goto не выполняется.

Некоторые ваши условия записываются как

if [%risp%]==[leggero]

В этих случаях условие будет работать, так как строка будет проанализирована в

if [leggero]==[leggero]

, но если значение, полученное от пользователя, содержит пробелы, команда не выполнится. Это также необходимо изменить.

Попробуйте с

if "%risp%"=="pikachu" goto UNO

То есть значения в кавычках по обе стороны от условия (так что обе стороны могут быть равны) с кавычками, защищающими наличие пробелов.

Это (или подобное) изменение должно быть сделано во всех ваших if командах.

Другая проблема с вашими goto - это то, как вы называете метки, куда прыгать. Вы не можете включать пробелы в название метки. battaglia 1 и battaglia 2 обозначаются как battaglia, а команда goto переходит к ближайшей (от goto строке до конца файла, затем от начала файла) метки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...