我目前正忙于处理批处理脚本的操作系统类的作业。我遇到的主要问题是在程序中编写一个函数for循环,精确地通过1到100的范围,并通过算术表达式%% variable mod 5 + 3计算总和。
当前的结果我得到的范围是从运行时只得到0作为答案,或者加3的数字,例如3,然后是6然后是9等。
以下是我的代码的相应部分:
for /l %%i in (1, 1, 100) do (
set /a result = %%i %% 5
set /a calctotal = %result% + 3
)
set /a average = %calctotal%/100
echo %average%
pause
答案 0 :(得分:1)
SET /a calctotal=0
for /l %%i in (1, 1, 100) do (
set /a result = %%i %% 5
set /a calctotal += result + 3
)
set /a average = %calctotal%/100
echo %average%
对我来说问题是“通过算术表达式%%变量mod 5 + 3计算总和”的解释
现在这意味着the sum of (%%variable mod 5 + 3)
或(the sum of (%%variable) mod 5 + 3
??
无论如何,你的代码存在一些问题(好吧,如果没有,你不会问,是吗?)
首先,在'block'(带括号的系列行)中,任何%var%
在遇到块时被var
的值替换,并且在执行块时不会更改。处理此问题的经典方法是调用delayedexpansion
。
因此,在您的代码中,您执行set /a calctotal = + 3
100次,因为%result%
将被循环开始时的值替换(可能未定义,因此没有)
下一个问题是,您尝试将calctotal
设置为result
的最新值 - 您不是累积值。
然而在这种情况下,您可以使用set /a
语法,该语法适用于变量的current
值 - 前提是您不要将它们调用为{{ 1}}。
%var%
使用set /a calctotal += result + 3
来累积值。您也可以使用+=
,这可能更明显。
我在开始之前将set /a calctotal = calctotal + result + 3
设置为零,以防它设置好。
毫无疑问,您可以使用calctotal
result
的需求