for i=0 to num,而num这时等于5,那么只能循环6次,而如果在循环中把num值改为2,它同样会循环6次。而我的程序之所以会出错,就是我在循环中用了这个类似num变量。
//不明白你为什么要用这个方法循环,应该有其他方法!比如跳出循环 exit for
//至于循环次数固定,这个和VB的for循环机制有关!你换成while或者do...loop循环应该也可以!

解决方案 »

  1.   

    为什么是我的问题,我用其它语言都没有这个问题呀,
    还有,如果VB不允许循环的数是变量,那么也可以呀,以后for i=0 to num就出错,只能
    for i=0 to 5。这样也可以呀,以后我不就用do while了吗?
    如果这个问题是我自己代码有问题,那和VB是面向什么人群的,不是说容错能力强吗?
    这怎么解释!回复人: lxcc(虫子|专注于抢分  说的还在理!至少说出了一些问题。
    而 回复人: tztz520(午夜逛街) 直接下这种结论,是不是说我的水平不行,我水平本来就不高,
    所以才用VB,这也是所有人都知道的,那么VB存在的问题是怎么回事????你能解释一下吗?
    我很想知道这是为什么,我对编译原理也不是很了解,但我觉得编译器在处理这方面的问题时不是很困难吧,还是微软出于什么考虑的呢?
    至少让我费了这么大劲,我得知道为什么吧!
      

  2.   

    for循环的时候num如果是个long或者int的变量,在循环中间是不要被使用这就和java要对大小写严格区分,VB不区分一个道理。VB只是一种快速开发的工具,每个语言都有自己的不同的特性和关键字
    楼主吸取教训好了这不是VB的bug,是你对这个VB写法的错误其他语言我不清楚,因为我忘了,但是如果你学习过MS的设计实务就知道,这样的事情要尽量避免
      

  3.   

    我觉得不是bug,因为num是用来循环的变量,在for内是不许改动的,如果你想在里面改为2就让其运行两次,我觉得编程思路已有不妥,你可以用exif for 等退出,不要轻而晚举num。^_^
      

  4.   

    //就是我在循环中用了这个类似num变量。楼主的编码风格要改进一下哦 :P
      

  5.   

    微软可从来不说过,还天天说自己的东西好“到天上去!”
    //
    我以前在tw工作,tw是有MS的特定出版社。里面有本书叫《VB设计实务》。那是MS对VB编程最基本的要求。相对看下,国内从来都没有强调过打好基础,什么所谓21天学会XX你觉得可能吗?MS不是没说过,是咱们自己不去重视。
      

  6.   

    >for i=0 to num,而num这时等于5,那么只能循环6次,而如果在循环中把num值改为2,它同样会循环6次。而我的程序之所以会出错,就是我在循环中用了这个类似num变量VB 就是这样的呀!这究竟是 VB 的 BUG 还是你的 BUG?^_^如果你需要改变循环次数,应该的循环开始以前赋值。如果在循环中要改变,可以跳出循环,或改写 i 的值。
      

  7.   

    Option ExplicitPrivate Sub Form_Click()
        'i的值是用来读的,不是用来写的。
        Dim i As Long
        Dim str As String
        Dim arr() As String
        str = "abc 123 xyz 000"
        arr = Split(str, " ")
        For i = LBound(arr) To UBound(arr)
            Me.Print arr(i)
        Next
    End Sub
      

  8.   

    为什么总是说我的原因,这样的写法我在C++B和VC,BC3.1还有许多语言环境下写,都是可以的!
    我也没有说是微软的BUG,我只说是我找到BUG了,
    我用C语言写了也有五年程序了,
    我也不是什么成就也没有,
    我也曾经获过全军二等奖,三等奖。
    我只是奇怪为什么微软会做出这样的动态性能不好的语言
      

  9.   

    呵呵,VB是RAD中的RAD啊,没点个性怎么行啊!
      

  10.   

    呵呵,不同的语言当然不一样了
    C++B和VC中还可以在判断中赋值呢,
    if(a=b)
    但在VB里就不可以,
    if a=b就只是判断,相当于if(a==b)
    在Java里if(a=b)编译会报错的
      

  11.   

    MS的工具是有很多问题,但是这个不是MS的问题呀你知道如果VB里面大小写,它有时候不一定会严格区分
    但是你拿到C#,拿到java中间试下C语言有C语言的写法,VB有VB的写法,你不能拿自己写法的错误来说是VB的bug啊^^难道我做习惯VB,我习惯大小写不分,我明天去写java,写c#发现要分大小写了我立刻说:看,这是C#的问题,这是JAVA的问题???!1
      

  12.   

    这不能算是bug,自己的基本功不过关.
      

  13.   

    不仅VB,在Delphi里也是不允许修改循环控制值的,因为循环是优化过的,由编译器管理的
      

  14.   

    Delphi里连i都不能修改,但到也是Delphi的Bug?
      

  15.   

    我也碰上了这个问题的,找得我很苦,花了几天的时间,最后我还是用DO WHILE解决问题,有同感
      

  16.   

    这并不是vb的bug,而是基础的问题,就像 daisy8675(莫依) 所说的:“C语言有C语言的写法,VB有VB的写法,你不能拿自己写法的错误来说是VB的bug啊^^ 难道我做习惯VB,我习惯大小写不分,我明天去写java,写c#发现要分大小写了 我立刻说:看,这是C#的问题,这是JAVA的问题???!1 ” 在这里改num的值是没有用的,但可以改i的值就行了。
      

  17.   

    //daisy8675(莫依) :什么所谓21天学会XX你觉得可能吗?555,正在看21天学通.NET   :(
      

  18.   

    aiur2000(开始.NET)正在做一件不可能的事情啊 ;)
      

  19.   

    //aiur2000(开始.NET)正在做一件不可能的事情啊 ;)有可能,一个月转上VB.NET不是难事,只要你白天上机操作,晚上看书.当然这要有VB的基础,如果VB都不会那就难了。^_^
      

  20.   

    我做软件 10 年了。用过(现在也用)VB、Delphi、VC++、汇编。虽然没有像楼主那样得奖,可我知道,要写出好的程序,就必须了解你的工具。所以我很注意看文档。
    我要是查出了 Bug,绝不会把责任推到别人身上,即使是工具的Bug。因为,即使是 Bug,等你遇到了,必然已经是“已知”的了。网上到处都可以查到这些资料。因为我会用 C,所以 VB 就不可以这样那样。还更多 VB 允许而 C 不允许的呢,你又怎么办?
    因为你得过 PLA 的奖,所以就一定是微软的错?这也太可笑了。
    再问一句,骂娘之前,先手拍胸脯想想,你用的是正版吗?再说了,你完全可以选择不用,没人强迫你。
    我们大家可以等待你写出动态性更好的 VB 吗?
      

  21.   

    //aiur2000(开始.NET)正在做一件不可能的事情啊 ;)
    反正是学通又不是学精,我最喜欢搞快速点的,要我21月学精.net是要我命,以后可以慢慢精的。现在又在看asp.net,幸好有点源码,copy一写还不错,边做边学吧。
      

  22.   

    回复人: flyingZFX(★我飞★我飞★我飞呀飞★)
    这是楼主的代码问题,怎么会推到VB身上呢.这不是第二个人和我这么说了,但是请问,是我哪做错了?
    没有理由的说我错了,仅仅对方是微软吗?
    我也说过了,我在其它语言下写,是没有问题的呀!
      

  23.   

    更迷糊了,
    即便是你在循环中改了循环的次数,但是也不能发生益出啊,还有就是为什么不用LONG类型,别说这是VB的错.
      

  24.   

    TO:tztz520(午夜逛街)-_-#无语.
    我在禁区只不过是用手碰一下球,为什么要判点球呢,我打篮球的时候也用手呀.
    反正都是球,为什么呢.  黑哨呀
    --------------------------------------------
    经典!!!!!
      

  25.   

    这个跟VB无关的,很多语言都不支持在循环中修改循环变量的,象DELPHI就是,只是VB做得没那么好,在编译的时候没有提示你罢了。不过也谢谢你,如果我以后写VB程序,也可以注意
      

  26.   

    楼住真强这也叫vb的bug
     那么我门做的程序因为自己没有严禁的语法概念自己不小心用错了一个变量
    程序出错了也能怪别人,
    还是把基本功打好在说吧!
      

  27.   

    我也来说两句吧!
    我觉得楼主换个角度想想,可能就不会怪VB了。甚至应该感谢它。可不可以请楼主告诉我,while 和 for 的区别在哪里?我记得我看过一本书,上面告诉我说,如果事先知道循环的次数,请使用for ... next循环,因为它的效率会更高。
    for在内部维护着一个记数器,并且它在循环的开始就记录了循环的次数,它并不是在每次循环时都检查终值的大小。试想,如果VB中的for真的象C、java中的for一样,那么它就同样可以用while来代替了,如果while可以完全代替for,包括在内部效率上也相同,那么for的存在也就没太多的意义了。因此,我们可以把VB的这个特性理解为对传统的for ... next的一次改良。
    其实正象楼上几位仁兄说的,你在循环内修改终值来使循环终止,我个人认为这本身就不是一个好的习惯。它会使源代码的可读性大大降低。你可以使用exit for来退出的。甚至你可以用while来代替for也许是一个更好的选择。但是你千万不要更改循环变量(for i=star to end中的i)的值,因为它有一个内部的计数器,如果你修改它,则更不是好的习惯。因为它“不仅降低了程序的可读性,更重要的是它会使程序更加难以调试”,这句可不是我说的啊,这是MSDN中的劝告!我不得不佩服楼主在编程方面的成就,但我认为不能因为自己有了成就就认为自己总是对的。这方便的话我就不多说了,总之我不认为这是MS或者说是VB的BUG。
      

  28.   

    我不认为这是一个BUG,而是楼主没有很好地掌握VB而已。
    各种语言都有自己的规范,没有理由要求VB和其他语言一样。
    既然提供了exit for,就应该利用。
    等到你用c++的时候,只要规范允许,无论你愿意写多么诡异的循环都可以。
    当然是不是容易出错,别人是不是容易看得懂,楼主肯定不会去考虑。
      

  29.   

    本人同意songyaowu的分析,vb中将for语句如此定义是有道理的。不知经songyaowu的分析后
    楼主能不能认同这一点。
      

  30.   

    赫赫,我觉得没有什么bug不bug 
    如果没有搂主的以身试法,我还不知道 会有这样的结果,因为我从来没有像楼主这么用过,但是我在学习入门的时候,老师就说了for和while的区别 
    也许是大家是对vb都有很深的感情才会这样的,楼主页不要见怪,(你不能用着人家的东西说人家不好)
      

  31.   

    有感于True1024(星空) 的发言。“大家不要把矛头都指向楼主啊”,其实我想大家的本意和我一样,都是想发表一下自己的意见而已,最终目的还是互相学习,如果我的言辞会使楼主误解的话,我真心地向楼主表示歉意。
      

  32.   

    其实这事我最近一直在想,也许真的是自己知道的知识太少,但是一个BUG费了半天劲最终是这个原因也心里不舒服。发在这里大家讨论一下也许会心里好受一点,不知道的人也可以注意一下。谢谢大家!
      

  33.   

    哈哈,新手常见问题。
    想当年学 C(Trubo C,离 Visual C 还早呢)时老是把 & 和 && 搞混。VB 上手快,精通慢,不要急。
      

  34.   

    楼主,这个问题真的也让我大吃一惊,想一想这个问题决对属于一个BUG
    开发环境没有说在循体内不能修改上限的值,而在改了之后又不认可,BUG啊,楼主真的强这样的BUG也样你找得到佩服佩服.我正想用VB开发个系统这下可让我好好的吸取一下教训不要发生内似的错误了.
    不过说真的,在循环体内修改循还变量上限的值不是很好的编程风格.为什么不改i的值为4呢一样可以达到效果啊
      

  35.   

    这个也并不能说是什么BUG,只能说VB在这个地方做得和其他语言不一样而已。
    有的时候习惯性的思路往往会把人带上歧路。或许换个没有接触过其他语言的人反倒以为是正常的啦。
    就象楼主遇到的问题,我在学C的时候,书上说的确实是和楼主的一样,循环一次,判断一次。
    而VB则因为最终无法生成机器代码在运行速度上相对其他语言要慢,所以就在编译器上下了很大的功夫优化,包括楼主所遇到的这个问题其实也就是VB用于速度优化的一个表现,当然,只是因为楼主以前用C什么的,先入为主,才会遇到这个麻烦。
    不过话又说回来,虽然C,C++等语言可以在循环中改变循环终值,但是也不会有一个计算机老师推荐你在循环中去改变它们,因为从编程风格和逻辑方面来说,这都算不上是一个什么好习惯。
    没有要说楼主坏话的意思,只是就事论事而已。
      

  36.   

    WallesCai(皮厚怎么了,摔跤不疼,冬天不冷,夏天还不怕蚊子呢!)说的很中肯哦!
      

  37.   

    呵呵,这个不能叫bug,这是语言特性的问题,比如有的C++编译器从左边开始传递参数,有的从右开始
    传递参数。
      

  38.   

    所以说最好不要在C中写这样的代码,如 SomeFunction( i++,j+(i++))
    是i先自增呢还是先于j相加呢?
    楼上的各位说得都很中肯,重视代码规范很重要的
      

  39.   

    正么长的帖子啊,ME刚用VB4个月,挺好的,但只能改代码!(拿别人的来改(COPY))
      什么时候才能自己写呢!··
      

  40.   

    呵呵,看来还是只用一种语言好,我从VBA起家,现在用VB,可能以后用vb.net.C可以看懂,但是从来不真正使用,别的语言一窍不通,哈哈楼主的问题我是不会遇到了,更不会与别的语言比较了.
      

  41.   

    a=1000for i=0 to a
     a=a+1
     if a>10000 then exit sub
    next i如果照你所说的,a岂不是要循环一万次?a=1000for i=0 to a
     a=a*rnd*100
    next i这个要循环几次那?
      

  42.   

    vb的for好像就是这样的,也出现过。
      

  43.   

    很显然,这是楼主的问题,在for循环中改变for循环的变量肯定是不行的,随便放在那种语言里都一样,继续学习吧,不要太张扬,万事先从自己身上找问题,不然你是不会提高的。
      

  44.   

    这到底算不算 Bug 真得那么重要吗?难道Bug和非Bug真的有明显的界限吗? 又不是刑事案件,非要定性不可。
    Delphi中如果改了循环终值会在编译时报错,VB不报错,掩盖了错误,算是设计上的不完善,没必要追究到底算不算 Bug 。
      

  45.   

    刚学VB时候骂盖茨有病,前段时间学Delphi骂Borland白痴,现在学C#只好又骂微软混蛋。天底下要只有一门语言,就只骂一个多好!(秦始皇)
      

  46.   

    谁知道哪下 莫伊说的 VB设计实务入门阿
    //
    一本MS出的书,国内没有,我看的是台湾的书,台湾有专门的MS的出版社。
    象MS的出,国内也有翻译比如我现在正在看的《net框架程序设计-VBNET描述》就是李建忠老师翻译
    可惜啊,国外的好书到国内翻译了,总是差点什么,虽然说李老师是有名的翻译者发现有个特点,在国内相大大的比例根本没有去从基础抓起,比如常常说如何学习vb,属性,方法,事件,真的掌握了就大的问题没有了,常常看某些问题都是事件,属性不清楚。基础不好台湾的好书还是比较多,就是太贵了,买不起,ft....