@echo off
pause
set /a x=1
set /a n=0
set /p x_end=x (End)=
:loop
cls
set /a n=n+1
set /a x=x+n+1
set /a students=n+2
echo x=%x%, n=%n%, x (End)=%x_end%
if (%x%=%x_end% goto end)
goto loop
:end
echo Answer: x (End)=%x%, Students=%students%, n (end)=%n%
echo.
echo Click Anything To Exit...
pause > nul
exit

Строка "if" выдает сообщение о том, что то, что вы поместили в переменную% x_end% "на этот раз было неожиданным".

1 ответ1

0
@echo off
rem pause
set /a x=1
set /a n=0
set /p x_end=x ^(End^)=
rem ensure %x_end% will result to a number 
set /a "x_end=x_end"
:loop
  echo cls
  set /a n=n+1
  set /a x=x+n+1
  set /a students=n+2
  echo x=%x%, n=%n%, x ^(End^)=%x_end%
  rem pause >nul
  if %x% GTR %x_end% goto end
goto loop
:end
echo Answer: x ^(End^)=%x%, Students=%students%, n ^(end^)=%n%
echo(
echo Click Anything To Exit...
pause > nul
rem exit

В приведенном выше фрагменте кода есть следующие улучшения:

  • просто для отладки
    • некоторые rem (начальная pause , последний exit);
    • echo cls вместо cls ;
  • важный
    • set /a "x_end=x_end" чтобы %x_end% приводил к числу для любого пользовательского ввода;
    • if допустимый синтаксис: используйте GTR (> больше или) или GEQ (> = больше или равно);
    • из-за особого значения скобок в пакетном сценарии все открытия ( и закрытия ) экранируются во всех случаях, когда они должны использоваться буквально (echo и set /p). Попытка, if 1==1 (echo (inner) parentheses) покажет, что это может иметь значение. Хотя это не имеет значения в данном фрагменте кода, в общем случае это целесообразно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .