2016-11-10 2 views
2

Следующий код должен выполнять вычисление разделения. Он должен попросить пользователя ввести первый номер, дождаться ввода, а затем повторить со вторым номером.Пакетный файл закрывается после нажатия пользователем.

(Некоторые дополнительные сведения: Пользователю не позволено войти в число 22 или 0)

До сих пор, после ввода первого номера он выходит на меня. Понятия не имею почему.

Любая помощь будет оценена!

@echo off 
cls 

:START 
set /p FN = Enter first number: 
if %FN% == 22 GOTO EXIT 
GOTO SECONDNUMBER 


:EXIT 
exit /b 

:SECONDNUMBER 
set /p SN = Enter second number: 
if "%SN%" == 22 exit /b 
if "%SN%" == 0 GOTO ZEROERROR 

GOTO DIVIDE 


:ZEROERROR 
echo Sorry! You CAN NOT divide by ZERO. Please enter a new number. 
pause 
cls 
GOTO SECONDNUMBER 

:DIVIDE 
set /a RESULT = %FN%/%SN% 
echo %FN% divided by %SN% = %RESULT% 
pause 
cls 
GOTO START 
+1

'set/p SN = ...' устанавливает переменную с именем 'SN' + _space_. 'if"% SN% "== 22' сравнивает цитируемую строку с некотируемой и поэтому всегда терпит неудачу (кавычки являются частью сравнения); Чтобы решить эту проблему, укажите также правую часть («22»); цитируемый синтаксис устойчив к пустым строкам, но некорректный - нет. – aschipfl

+1

Я думаю, что мы ответили на эту же проблему каждый день на этой неделе. То же самое с задержкой расширения. Вероятно, две наиболее распространенные ошибки с пакетными файлами, которые люди не понимают. – Squashman

ответ

2

Вы можете попробовать что-то вроде этого:

@echo off 
Title Division Computation 
:START 
cls 
Color 0A 
set /p "FN=Enter first number : " 
if "%FN%" EQU "22" Exit 
::******************************* 
:SECONDNUMBER 
Color 0A 
set /p "SN=Enter second number : " 
if "%SN%" EQU "22" Exit 
if "%SN%" EQU "0" GOTO ZEROERROR 
GOTO DIVIDE 
::******************************* 
:DIVIDE 
set /a RESULT=%FN%/%SN% 
echo %FN% divided by %SN% = %RESULT% 
pause 
cls 
GOTO START 
::******************************* 
:ZEROERROR 
Color 0C 
echo Sorry! You CAN NOT divide by ZERO. Please enter a new number. 
pause 
cls 
GOTO SECONDNUMBER 
::******************************* 

И это бонус Калькулятор с пишущей машинкой и говорить голосом от меня к вам только для удовольствия :)

@echo off 
Title Calculator with a TypeWriter and Speaking Voice by Hackoo 2016 
Color 0A & Mode con cols=80 lines=3 
Call :TypeWriter "Hello, Welcome to my calculator. First off would you like to tell me your name ? " 
echo(
Call :TypeWriter "So, Whats your name ? " 
set /p name= 
Call :TypeWriter "Ah, Nice to meet you %name% !" 
::************************************************************* 
:start 
Call :TypeWriter "What is the first number you want to use ? " 
set /p no= 
Call :TypeWriter "What Operation do you want to use ? " 
set /p op= 
Call :TypeWriter "What is the second number you would like to use ? " 
set /p no2= 
Call :TypeWriter "%no% %op% %no2% " 
set /a ans=%no% %op% %no2% 
Call :TypeWriter " Well, That was an easy one the answer is %no% %op% %no2% = %ans% " 
Call :TypeWriter " Would you like to do another calculaton ? Y(Yes) or N(No) ?" 
set /p Question= 
If /I "%Question%"=="Y" (goto :start) else (Goto :end) 
::************************************************************* 
:TypeWriter 
Cls 
echo(
(
echo strText=wscript.arguments(0^) 
echo intTextLen = Len(strText^) 
echo intPause = 150 
echo For x = 1 to intTextLen 
echo  strTempText = Mid(strText,x,1^) 
echo  WScript.StdOut.Write strTempText 
echo  WScript.Sleep intPause 
echo Next 
echo Set Voice=CreateObject("SAPI.SpVoice"^) 
echo voice.speak strText 
)>%tmp%\%~n0.vbs 
@cscript.EXE /noLogo "%tmp%\%~n0.vbs" "%~1" 
exit /b 
::************************************************************** 
:end 
Exit 
::************************************************************* 
+1

Спасибо! Вы заставили меня понять, что у меня были пробелы между моими знаками «=». Как только я удалил их, все сработало нормально! – user1017524

Смежные вопросы