Windows批处理文件,两个数字的划分,用于划分为0的错误陷阱
我正在尝试编写一个windows批处理文件,该文件实现了除了第二个数字为0的情况下的一些错误陷阱的划分。如果用户输入55它应该进入一个循环,找到从1-100模5,+ 3 计算每个数字的所有结果的总数循环结束后,它应该显示所有结果的平均值并将它们附加到一个txt文件。Windows批处理文件,两个数字的划分,用于划分为0的错误陷阱
当我尝试,分区,屏幕弹出并消失。如果我输入55,永远不会到达循环。任何帮助表示感谢,谢谢!
:FORLOOP
cls
PAUSE
SET COUNTER=0
SET MODNUM=5
SET ADDNUM=3
SET RESULT=0
SET TOTAL=0
SET AVG=0
GOTO LOOP
:LOOP
SET /A COUNTER=COUNTER+1
SET /A "RESULT=((%LOOP% %% %MODNUM%) + %ADDNUM%)"
ECHO %COUNTER% MOD %MODNUM% PLUS %ADDNUM% IS %RESULT%
SET /A "TOTAL=%TOTAL% + %RESULT%"
IF %COUNTER%==100
GOTO AVG
:AVG
ECHO.
SET /A "AVERAGE=(%TOTAL%/100)"
ECHO AVERAGE OF RESULTS IS %AVG%
ECHO.
@ECHO AVERAGE OF RESULTS IS %AVG% >> results.txt
GOTO EXITLOOP
:EXITLOOP
PAUSE EXIT /B
没有尝试它自己,它看起来像一旦你到:从AVG:一个循环中,则分为:EXITLOOP,其退出一批。
问题不是他得到exitloop,而是他的代码错误出来之前,它甚至达到。 –
在使用它之前,您没有设置%loop%。
C:\Users\me>SET /A "RESULT=((% 5) + 3)"
Missing operand.
这意味着,3线后你会得到一个语法错误:
IF %LOOP%==100
该炸弹,因为
IF ==100
是无效的语法。
您是不是想要使用%COUNTER%而不是%LOOP%?
调试时,删除您的'cls'命令,以便您可以看到您的错误。
您也可以从cmd.exe窗口运行脚本,然后脚本结束时输出不会消失。
如果您%COUNTER%取代%LOOP%的两个实例,然后再修复语法错误,那里的
IF %COUNTER%==100
和
之间的换行符GOTO AVG
那么至少它完成没有错误。我会让你确定它是否正常工作。
我刚才意识到我有变量循环而不是计数器,那会是问题吗? – javaGuy123456
好的,谢谢我只是改变了它,但是当我到达循环,出现“按任意键继续”,我按下回车键,它闪过一个屏幕,并消失 – javaGuy123456
你是否还把'IF%COUNTER%== 100'和'GOTO AVG'在同一行上,所以你得到一行看起来像这样的:'IF%COUNTER%== 100 GOTO AVG'? – LinuxDisciple
我会把你的逻辑检查为零高于你的逻辑检查55.除零比55检查更危险。在做任何事情之前,确保数据是有效的。
似乎也没有办法从AVG回来。之后它才会退出批处理文件。
因为当第一个或第二个数字是55时,并不是真的有必要。 –
可能没有必要,但最好先验证最危险的方案。尽管如此,他们真正的问题在于AVG标签缺乏回报。 – ManoDestra
不,回报不是问题,但脚本确实真的被打破。他设置了错误的变量,他的循环不起作用,并且有一些语法错误,我在回答中详细介绍了这些错误。 –
你正在做一些错误的事情。
首先,你设置了一个名为平均值,而不是AVG变量,所以AVG总是会为0。其次,你拼错师,你IF NOT %SECONDNUM%==55 GOTO DIVISON
而且,LinuxDisciple在他的回答中提到,批处理文件是逐行解释的,所以你不能在两个不同的行上使用if和goto。
最后,你有一些错误的逻辑。我想你想做到这一点:
@echo off
@ECHO Carlos Deleon >> results.txt
@ECHO %date% %time% >> results.txt
:MAIN
cls
:FIRSTNUM
ECHO.
ECHO ENTER FIRST NUMBER
SET /P FIRSTNUM=Enter a number and press ENTER :
IF %FIRSTNUM%==55 GOTO FORLOOP
GOTO SECONDNUM
:SECONDNUM
ECHO.
ECHO ENTER SECOND NUMBER
SET /P SECONDNUM=Type a different number and press enter :
IF %SECONDNUM%==55 GOTO FORLOOP
IF %SECONDNUM%==0 GOTO ASKAGAIN
IF NOT %SECONDNUM%==55 GOTO DIVISION
IF NOT %SECONDNUM%==0 GOTO DIVISION
:ASKAGAIN
ECHO.
ECHO INVALID ENTRY, CANNOT DIVIDE BY ZERO, ENTER TWO NEW NUMBERS
GOTO FIRSTNUM
:DIVISION
ECHO.
SET /A RESULT=%FIRSTNUM%/%SECONDNUM%
ECHO %FIRSTNUM% divided by %SECONDNUM% is %RESULT%
@ECHO %FIRSTNUM% divided by %SECONDNUM% is %RESULT% >> results.txt
GOTO FIRSTNUM
:FORLOOP
cls
PAUSE
SET COUNTER=0
SET MODNUM=5
SET ADDNUM=3
SET RESULT=0
SET TOTAL=0
SET AVG=0
GOTO LOOP
:LOOP
SET /A COUNTER=COUNTER+1
SET /A "RESULT=((%COUNTER% %% %MODNUM%) + %ADDNUM%)"
ECHO %COUNTER% MOD %MODNUM% PLUS %ADDNUM% IS %RESULT%
SET /A "TOTAL=%TOTAL% + %RESULT%"
IF %COUNTER% lss 100 GOTO LOOP
:AVG
ECHO.
ECHO %TOTAL%
SET /A "AVG=(%TOTAL%/100)"
ECHO AVERAGE OF RESULTS IS %AVG%
ECHO.
@ECHO AVERAGE OF RESULTS IS %AVG% >> results.txt
GOTO EXITLOOP
:EXITLOOP
PAUSE EXIT /B
注意,如果LSS意味着它不断循环,而计数器小于100,这是你想要什么,如果计数器是不是仅仅循环已经有100
请记住,一旦你完成这项工作,你的分割结果将仍然限于整数。 'cmd'没有任何处理小数值的方法,所以它们被舍入到最接近的整数。在'cmd'窗口中尝试:'set/a results = 3/4' –
整个数字都是我需要的这个程序的全部数据,但是为了将来的参考,我将如何得到小数值? – javaGuy123456
请尝试在这里:http://stackoverflow.com/questions/18689450/decimals-in-batch-script –