这是我的代码
@echo off
setlocal enabledelayedexpansion
set /A i=1
echo "Enter 10 numbers"
:loop
if %i% GEQ 6 goto end
Set /p num= Enter number echo %i%:
set arr[%i%]= %num%
set /A i=%i%+1
goto :loop
:end
set /A j=0
:loop2
if %j% GEQ 5 goto end2
set /A num2=!arr[%j%]!
if !arr[%j%]! %% 3==0 (echo !arr[%j%]!)
set /A j=%j%+1
goto :loop2
:end2
pause
但它总是崩溃我想找到可以被 3 整除的数字我不知道我做错了什么而且我也是批处理脚本的新手。
确定一个数是否可以被三整除的最好方法是使用
Set /A
命令。如果打开命令提示符窗口,请键入Set /?
。然后按 ENTER 键,您应该会看到算术表达式。您需要的是模运算符 %
,在 batch-file 中使用时必须加倍。如果您对整数使用三的模数,则结果将是余数。因此,0
的结果意味着整数可以被三整除。
也许这段代码会进一步帮助你。
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
:AskNumList
Set "NumberList="
Set /P "NumberList=Enter 10 integers separated by spaces>"
(Set NumberList) 2> NUL | %SystemRoot%\System32\findstr.exe /RC:"^NumberList=[0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]* [0123456789]*$" 1> NUL
If ErrorLevel 1 GoTo :AskNumList
:PseudoArray
For /F "Delims==" %%G In ('"(Set Arr[) 2> NUL"') Do Set "%%G="
Set "i=1"
Set "Arr[!i!]=%NumberList: =" & Set /A i += 1 & Set "Arr[!i!]=%"
:IsDivisibleByThree
For /F "Delims==" %%G In ('"(Set Arr[) 2> NUL"') Do (Set /A _ = %%G %% 3
If !_! Equ 0 (Echo The integer !%%G! assigned to %%%%G%% is divisible by a factor of 3
) Else Echo The integer !%%G! assigned to %%%%G%% is not divisible by a factor of 3)
Pause
第一个标记部分
:AskNumList
,要求您输入 10 个整数,并且只有在输入正确数量的整数时才会移动到下一个部分。
下一个标记部分
:PseudoArray
,为每个输入创建单独的变量以在脚本中进一步使用。
最后标记的部分,
:IsDivisibleByThree
,执行模计算以确定该值是否为 3 的因数。
您可以使用 for /L 循环以 3 为步长迭代,并结合针对每个输入值的 if 条件比较来仅在匹配时增加计数。
@Echo off
Set "ValidateArray=For %%z in (1 2)Do if %%z==2 (Set /P "string=Enter 10 multiples of #: "&Set "_i=0"&(For %%i in (!string!)Do for /F "delims=" %%n IN ('set /a "_v=%%i %% #" 2^> Nul ') do if %%n equ 0 (set /A "_i+=1" & Set "!RV![!_i!]=%%i")) & if Not !_i! Equ 10 Goto :input)Else Set RV="
Setlocal EnableDelayedexpansion
:Input
%ValidateArray:#=3%Arr
Echo/input valid & Set Arr[
Endlocal
延迟扩展用于防止外部 for %%i 循环中的毒字符
只需这样做:
@ECHO off
SET /p num="Enter the desired number: "
SET /a num1="(%num%/3)*3"
IF %num% EQU %num1% (echo The number is divisible by three.) ELSE (echo The number is not divisible by three.)
这是可行的,因为 Windows 在除法时不会给你一个小数,而是四舍五入,所以它所做的是将输入的数字乘以 3,然后除以 3。如果数字可以被 3 整除,那么这两个数字将是一样的,你会得到一个输出,反之亦然。