我正在尝试编写一个脚本,该脚本将采用用户输入的整数,然后将所有数字相加。整数必须介于1-99
之间示例:
如果用户输入27
输出:9
以下是代码:
@ECHO OFF
SET /p number="Enter a number: "
SET sum=0
IF %number% GTR 9 (
SET /a temp=%number% %% 10
SET /a sum+=%temp%
SET /a number/=10
SET /a sum+=%number%
) ELSE (
SET /a sum+=%number%
)
echo %sum%
所以让我们说例如输入的数字是19,它应该首先执行19%10得到“9”然后19/10得到1,将它们相加并得到10.但是当我实际运行这个时代码它返回19(如果我输入19)
答案 0 :(得分:1)
如果数字限制在1-99范围内,则计算结果为
set /a "sum=%number% / 10 + %number% %% 10"
%number% / 10
将返回左侧数字(如果有),如果%number%
小于10,则返回0
%number% %% 10
将返回正确的数字
只是总结一下
答案 1 :(得分:0)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。在块执行之前,块中的任何%var%
将被该变量的值替换为块。
因此,分配给temp
的值未按预期进行评估。
您应该查找有关delayed expansion
的许多SO文章,并了解batch substrings
。这将使您的工作更轻松。
并且不要将temp
用作用户变量,无论它看起来多么合乎逻辑。 temp
是一个目录指针,它告诉系统存储临时文件的位置。改变它不是一个好主意。
答案 2 :(得分:0)
@echo off &setlocal disableDelayedExpansion
SET /p "var=Enter var (1-99) "
set /a var=%var:~0,1%+%var:~1,1% 2>nul
echo %var%