2016-11-10 8 views
2

次のコードは除算計算を行うものとします。それは、最初の数字を入力し、入力を待ってから、2番目の数字で繰り返すようにユーザーに要求する必要があります。ユーザがEnterキーを押した後にバッチファイルが閉じる

(いくつかの余分な情報:ユーザーが番号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_と呼ばれる変数を設定します。 '%SN%" == 22 '引用符付きの文字列を引用符で囲まれていない文字列と比較するので、常に失敗します(引用符は比較の一部です)。それを解決するには、右の部分も引用してください( '' 22 "')。引用された構文は空の文字列に対して堅牢ですが、引用符で囲まれていない構文は堅牢ではありません。 – aschipfl

+1

私はこの同じ問題を今週毎日答えてきたと思います。遅延拡張と同じです。おそらく、人々が理解していないバッチファイルの2つの最も一般的なエラーです。 – 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

関連する問題