如何在批处理脚本文件中查找可被 3 整除的数字

问题描述 投票:0回答:3

这是我的代码

@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 整除的数字我不知道我做错了什么而且我也是批处理脚本的新手。

batch-file
3个回答
1
投票

确定一个数是否可以被三整除的最好方法是使用

Set /A
命令。如果打开命令提示符窗口,请键入
Set /?
。然后按 ENTER 键,您应该会看到算术表达式。您需要的是模运算符
%
,在 中使用时必须加倍。如果您对整数使用三的模数,则结果将是余数。因此,
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 的因数。


0
投票

您可以使用 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 循环中的毒字符


0
投票

只需这样做:

@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 整除,那么这两个数字将是一样的,你会得到一个输出,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.