mar*_*rko 0 windows cmd if-statement batch-file
[接收整数作为输入的简单程序,如果该数字是微不足道则打印]
当我运行这个我得到一个错误"(此时出乎意料)
@echo off
set /a i=2
set /p input="enter an integer: "
set /a n=input
set /a t=n/2
:loop1
if %t% LSS %i% (
goto trivial
) else (
set /a t0=n%i
if %t0%==0 (
goto notTrivial
) else (
set /a i=i+1
goto loop1
)
)
:trivial
echo %n% is trivial
goto endd
:notTrivial
echo %n% is not trivial
:endd
pause > nul
Run Code Online (Sandbox Code Playgroud)
但是当我在loop1中删除else语句时(这是不必要的(因为if if中的goto命令))它可以工作
:loop1
if %t% LSS %i% (
goto trivial
)
set /a t0=n%i
if %t0%==0 (
goto notTrivial
) else (
set /a i=i+1
goto loop1
)
Run Code Online (Sandbox Code Playgroud)
(这怎么可能?
删除else
子句时,其中的代码现在不在任何块中.
为什么这有关系?因为在批处理文件中,首先解析然后执行行或行块(括号内的代码).解析变量读取操作时,在开始执行命令之前,在解析时将替换为变量内部的值(此处更多).
所以,在这段代码中
) else (
set /a t0=n%i
if %t0%==0 (
goto notTrivial
) else (
set /a i=i+1
goto loop1
)
)
Run Code Online (Sandbox Code Playgroud)
您更改了变量的值t0
,但无法在同一块中检索此更改的值.但是,如果删除该else
子句,则代码不在块内,并且一切都按预期工作(语法错误除外,请尝试使用set /a "t0=n %% i"
).