批处理中判断输入是否是自然整数 无法正确输出的故障
先看代码@echo off
setlocal enabledelayedexpansion
:input
set "cs="
set /p cs=请输入一个自然整数(按回车确认):
rem 检查是否为负数、零或非法字符
echo Debugging: cs=!cs!
if "!cs:~0,1!"=="-" || "!cs!"=="0" (
goto :error
)
rem 使用 findstr 验证是否为自然整数
echo !cs! | findstr /r "*$" >nul
if errorlevel 1 (
goto :error
)
echo 输入正确:!cs!
pause
:error
echo 输入错误:请输入一个自然整数(不包括负数、零或非法字符)!
goto :input
endlocal
这个代码本意是让用户输入正确的有效数字,即1以上的整数,不包含负数,0开头的数字或者小数以及非数字类的字符,否则提示用户重新输入,如果输入正确,则输出正确数值。
按代码逻辑来说,似乎编译的没有问题,但现在的情况是,可以正常输入,但无论你输入的是啥,敲回车后就直接关闭了,也不输出错误也不输出正确~~ 请各位大佬给瞅瞅哪里的问题
另外,问个额外的事,有啥编程软件适合需求量不高的人使用的,比如我,只是用编程软件写一下体积不大的实用小工具,不需要太复杂的命令,主要应用平台是WINDOS平台。。最好是中文的(主要是英语不好~),如果有的话也给推荐推荐~ gchq2005 发表于 2024-10-20 19:25
@echo off
setlocal enabledelayedexpansion
感谢大佬的支援,这是我修正后的代码,完美落地~
@echo off
setlocal enabledelayedexpansion
:input
set "cs="
set /p cs=请输入一个自然整数(按回车确认):
rem 使用 findstr 验证是否为自然整数
echo !cs!|findstr "[^0-9]">nul&&goto :error||goto :qqd
set "cs=0!cs!"rem 临时在前面加一个0
:qqd
rem 去除前导0
for /f "tokens=* delims=0" %%i in ("!cs!") do set "cs=%%i"
goto right
:error
echo 输入错误:请输入一个自然整数(不包括负数、零或非法字符)!
goto :input
:right
echo 输入正确:!cs!
goto :input
pause
是不是可以这么写,
@echo off
set /p input="请输入一个自然整数:"
set input=%input: =%
if not "%input%"=="" (
if "%input%" LSS "1" (
echo 输入不是一个自然整数。
) else (
echo 输入是一个自然整数。
)
) else (
echo 输入无效,请输入一个数字。
)
要是主要WINDOS平台,简单的可以用批处理,稍微复杂点的可以用易语言(中文编程),python也可以,相比于批处理其他的需要编译后才能运行 第8~13删除,第15行改为:
echo !cs! | findstr /r "^*$" >nul 2>nul
即可 资料爬虫 发表于 2024-10-20 13:22
是不是可以这么写,
@echo off
不行,你这个有BUG,比如002无法被识别,-22能被支持等,实际应用要能去除前缀0,正常识别整数,同时小数、负数、非数值要能报错才行~ archon1 发表于 2024-10-20 16:11
第8~13删除,第15行改为:
echo !cs! | findstr /r "^*$" >nul 2>nul[ ...
似乎不能正常运行,要不然你在自己试试? @echo off
setlocal enabledelayedexpansion
:input
set "cs="
set /p cs=请输入一个自然整数(按回车确认):
rem 使用 findstr 验证是否为自然整数
echo !cs!|findstr "[^0-9]">nul&&goto :error||goto :right
:error
echo 输入错误:请输入一个自然整数(不包括负数、零或非法字符)!
goto :input
:right
echo 输入正确:!cs!
goto :input
pause
需要去前导0,下一步自己处理就好 Love0912 发表于 2024-10-21 08:50
感谢大佬的支援,这是我修正后的代码,完美落地~
@echo off
setlocal enabledel ...
09set "cs=0!cs!"rem 临时在前面加一个0
你这行不会被执行,没什么用呀! 本帖最后由 老伙计 于 2024-10-21 15:57 编辑
@Echo Off
:: 本代码要求从键盘输入一个正整数,并对输入内容进行检查,如果不符
:: 合要求则继续要求输入,直到满足要求为止。
Setlocal Enabledelayedexpansion
::-----------------------------------------------------------------------------------------------------------------------------------------------------
Goto Begin
::-----------------------------------------------------------------------------------------------------------------------------------------------------
:: check()
:: 函数功能:检查输入是否是一个整型数
:: 输入变量:VP - 待检查整数
:: 输出变量:VR - 检查结果,1 - 符合要求,0 - 不符合要求
:Check
Set VX=!VP!
Set /a VC=0
Set /a VR=0
:LP01
If Not {!VX!}=={} (
Set /a VR=0
Set VK=!VX:~0,1!
If !VK! Geq 0 (
If !VK! Lss 10 (
If !VC! Gtr 0 (Set /a VR=1)
If !VK! Gtr 0 (Set /a VR=1)
)
)
If !VR!==1 (
Set VX=!VX:~1!
Set /a VC=!VC!+1
Goto LP01
)
)
Goto :Eof
::-----------------------------------------------------------------------------------------------------------------------------------------------------
:Begin
Echo.
Set/p X="请输入一个正整数:"
Set VP=!X!
Call :Check
Echo.
If !VR!==1 (
Echo. 您键入的是 !X!
) Else (
Echo. 键入无效!
Goto Begin
)
Echo.
Pause gchq2005 发表于 2024-10-21 10:37
09set "cs=0!cs!"rem 临时在前面加一个0
你这行不会被执行,没什么用呀!
无所谓,留着混淆视听也挺好
页:
[1]