返回列表 发帖

[问题求助] 关于vbs的循环结构和数据类型的问题

大家好,我刚刚接触VBS。我看了一下这个网站发的视频,我发现里面介绍的循环结构都有一个特点,四种结构都有“起始”、“终止”,然后把循环的内容夹在中间,对吧?这使得循环的内容只能固定在“起始”和“终止”之间,似乎没有“DOS批处理”中的“goto”命令简单、容易理解。嗯,比如说这段批处理:
@echo off
:1
cls
Set /p pf= 请输入X的值
set x=%pf%
if %x% geq 899778 (
goto 3
)
if %x% geq 1 (
goto 2
)
:3
echo 输入值非法,请重新输入
pause
goto 1
:2
set y=0
set /a y=%x%+1
set /a y=%x%*%y%
set /a y=%y%/2
echo x!=%y%
pause
goto 1COPY
用vbs大概就是这样了:
dim i
i = inputbox("请输入X的值")
if i >= 1 then
i = 0.5*i*(i+1) : msgbox "X!=" & i
else
msgbox "X的值必须大于等于0"
end ifCOPY
可是我不知道msgbox "X的值必须大于等于0"之后该怎么回到i = inputbox("请输入X的值")
还有这条 = inputbox("请输入X的值"),如果输入的是非数字字符,会出现数据类型错误:

我不想出现这个东西,我想让它发现输入的是非数字字符的时候跳转到我的某一段代码中去
麻烦大家帮我看看

IsNumeric(expression) '判断是否是数字
i=0+i '数值转化
跳转不了解,不过好像只是错误才能GOTO
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

额,我去查了IsNumeric(expression),看不太懂....

TOP

vbs没有goto

TOP

dim i
do
   i = inputbox("请输入X的值")
   if IsNumeric(i) then
      if i >= 1 then
         i = 0.5*i*(i+1)
         msgbox "X!=" & i
         exit do
      elseif i = "" then exit do
      else
         msgbox "须大于等于1"
      end if
   elseif i = "" then msgbox "不能为空值"
   else
      msgbox "不能为非数字"
   end if
loopCOPY

TOP

回复 5# apang


    嗯,是这个效果,你的书写习惯跟我不同,差点没看懂,呵呵。
你是用“do......loop",不过,你这个方法,如果篇幅很长,或者中间夹有不循环的代码,就麻烦了吧?

TOP

回复 6# sun_di


    你的习惯是什么样的,说来听听。

我是新手,沿用了一些BAT的写法,不是什么好习惯。我很少用goto,几乎忘了goto是何物,呵呵。。。

如果Do...Loop循环体太长,你可以想办法让它变短(比如:Call过程调用)

TOP

本帖最后由 Demon 于 2012-11-7 23:54 编辑
apang 发表于 2012-11-7 09:11


都IsNumeric(i)了还会i = ""?

建议把工作代码放到循环之外。

TOP

回复 8# Demon


    这个我也不知道呃,我测试是这样:
输入框为空,按"确定"时,IsNumeric(i) = false,i = ""
输入框为空,按"取消"或红叉时,IsNumeric(i) = True,i = ""

TOP

回复  Demon


    这个我也不知道呃,我测试是这样:
输入框为空,按"确定"时,IsNumeric(i) = false ...
apang 发表于 2012-11-7 23:59


VBS中InputBox函数的返回值

按"取消"或红叉时返回值是Empty,IsNumeric时Empty转成0,所以True
1

评分人数

    • apang: 学习了,谢谢!技术 + 1

TOP

建议把工作代码放到循环之外。
Demon 发表于 2012-11-7 23:47



    呵呵,很是同意
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

初学者一般认为goto比较易懂

但大型程序设计,goto会让阅读者摸不着头脑,无法明确掌握程序结构

这是世界诸多大型软件公司所公认的,你不必质疑那么多专家的看法

QQ 20147578

TOP

本帖最后由 caspar 于 2012-11-24 06:11 编辑

改成
  IF Not isEmpty(i) and IsNumeric(i)  ThenCOPY
就行 一般inputbox都要這樣幹…

另外…除了批處理bat或cmd 要寫其它程序 最好放棄goto 是個很不好的習慣
最好是if...then… 裏頭調用sub或者function
程序按功能分塊才容易讀
但也別太多…可讀性 執行效率 和 分塊多少 可不是個正比關系…

TOP

返回列表