| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1337 人关注过本帖
标题:高手帮我看下,这是个怎么变成死循环了?
只看楼主 加入收藏
l87233203
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2015-3-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:21 
高手帮我看下,这是个怎么变成死循环了?
IF FILE('dmx.dbf')
  IF USED('dmx')
    SELECT dmx
    DELETE all
    pack
    ELSE
    USE dmx in 0 EXCLUSIVE
    SELECT dmx
    DELETE ALL
    pack
    ENDIF
   ELSE
      CREATE TABLE dmx(股票代码 c(10),rq d,cjhs n(10,2),zrhs n(10,2),ssqs n(10,2),xjqs n(10,2),zrhc n(10,2),cjhc n(10,2),mz n(10,2),nz n(2,0),xz c(10))
   ENDIF
   use
*!*    上面是清除翻译表中的数据记录。

USE C:\Users\13268862888\Desktop\fanyi\dmm.dbf
GO TOP
 k=s

 N=3
 N1=1-N*2/100
 N2=1-N/100
 N3=1+N/100
 N4=1+N*2/100
 
 *!*      DIMENSION a1(1),a2(1),b1(1),b2(1),c1(1),c2(1),d1(1),d2(1),e1(1),e2(1),m(1)
   PUBLIC a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,m
   STORE 0 TO a2,b1,b2,c1,d1,d2,e1,e2
   STORE 0.1 TO c2,a1

LOCATE FOR s>=k*1.06 OR s<=k*0.94

IF FOUND()
   IF s>=k*1.06
      A1=K
      DO ssqs
      DO WHILE EOF()
         DO xjqs
         DO ssqs
      LOOP
     ENDDO
   ELSE
      A2=K     
      DO xjqs
      DO WHILE EOF()
         
         DO ssqs
        
         DO xjqs
         LOOP
      ENDDO
   ENDIF
ELSE
   RETURN
ENDIF


红色里面,是执行第1 个IF ,现在能执行到DO SSQS.这里。但是如果我在接下来的DO WHILE EOF() 在EOF()前面加个NoT条件。怎么就变成死循环了呢?加.NOT.,也是一样。鼠标就变成了忙的了,说明还在执行。

DO XJQS和DO SSQS程序。我单独试过,可以用,也可以跳出的。




2015.04.23
就是缺少一个SKIP语句

DO SSQS  和 DO XJQS,是可以单独跳出的,里面也有DO WHILE 循环的,也有SKIP语句。

.not. EOF()和 not EOF() 和!NOT EOF() 是一个意思。

IF FOUND()
   IF s>=k*1.06
      A1=K
      DO ssqs
      DO WHILE NOT EOF()
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF
*!*             SKIP
         
         DO xjqs
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF
*!*             SKIP
        
         DO ssqs
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF
         SKIP
         
      LOOP
     ENDDO
   ELSE
      A2=K     
      DO xjqs
      DO WHILE NOT EOF()
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF  
*!*             SKIP
            
         DO ssqs
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF
*!*             SKIP
           
         DO xjqs
*!*             IF EOF()
*!*                EXIT
*!*             ENDIF  
         SKIP
              
         LOOP
      ENDDO
   ENDIF
ELSE
   RETURN
ENDIF

这就可以了。一个一个试的。

我的整个程序已经写出来了。

[ 本帖最后由 l87233203 于 2015-4-23 17:56 编辑 ]
2015-04-19 15:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
。。。

授人以渔,不授人以鱼。
2015-04-19 15:25
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
基础太有提高的空间了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-19 15:42
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
建议先了解下列语句的意义
      DO WHILE EOF()
            ..............
      LOOP
     ENDDO

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-19 15:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
DO WHILE EOF()
    DO ssqs
    DO xjqs
    LOOP
ENDDO
意思是直到有记录并记录指针指向有效记录为止。
2015-04-19 16:04
lihuibiaozs
Rank: 2
等 级:论坛游民
帖 子:6
专家分:17
注 册:2015-4-7
收藏
得分:10 
DO WHILE EOF()
         DO xjqs
         DO ssqs
      LOOP
     ENDDO

上述循环体中是对表的遍历,但缺了对表中记录行的动作。如SKIP。。。
2015-04-19 16:11
l87233203
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2015-3-8
收藏
得分:0 
是的,少一个SKIP
2015-04-19 16:20
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:5 
DO WHILE EOF() 能遍历表吗?
应是:
DO WHILE !EOF()
    SKIP
ENDDO
2015-04-19 16:29
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用l87233203在2015-4-19 16:20:49的发言:

是的,少一个SKIP

不是少个skip,而是在你的循环中没有结束的可能,所以就成了死循环。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-20 07:42
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用吹水佬在2015-4-19 16:04:56的发言:

DO WHILE EOF()
    DO ssqs
    DO xjqs
    LOOP
ENDDO
意思是直到有记录并记录指针指向有效记录为止。

并没有“为止”,而是无限循环下去。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-04-20 07:43
快速回复:高手帮我看下,这是个怎么变成死循环了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029041 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved