找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 721|回复: 8

[求助] [求助]:请教:如何让循环不被中断

[复制链接]
发表于 2005-5-26 12:55:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
看下面语句,如何让循环不被中断?
(defun c:jj()
  (while
  (command "line" (list 0 0))
  )
)
先谢啦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-26 19:27:54 | 显示全部楼层
[php](defun c:test ()
  (if (setq pt1 (getpoint "\n起点<退出> : "))
    (progn
      (command "pline" pt1)
      (while (setq pt (getpoint pt1 "\n下一点<退出> : "))
        (command pt)
        (setq pt1 pt)
      )
      (command "")
    )
  )
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-5-26 19:35:37 | 显示全部楼层
没有明白楼主的意图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-26 20:20:50 | 显示全部楼层
while函数在使用时必需有循环条件,而你没给条件。二楼是对的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-5-26 20:31:51 | 显示全部楼层
(command "line" (list 0 0))也是一个条件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-26 22:55:28 | 显示全部楼层
不用谢
[php]
(defun c:jj()
(command "line" (list 0 0))
(while (/= 0 (getvar "cmdactive"))
(command pause)
)
)


[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-27 12:59:43 | 显示全部楼层
很感激各位的热情帮助!
xyp1964 斑竹 和 狂刀大侠6楼的程序都是可行的,我修改了一下狂刀大侠6楼的程序,实现了我想要的功能:
(defun c:jj()
  (while (setq p1 (getpoint "\n起点<回车退出>:"))
    (command "line" p1)
    (while (/= 0 (getvar "cmdactive"))
      (command pause)
      )
    (princ "\n*** 重新开始画直线 ***")
  )
  (princ "\n*** 不再画直线,程序退出 ***")
  (princ)
)

回复2楼:
程序:
(defun c:jj()
(while
(command "line" (list 0 0))
(princ "\n看我能不能执行")
)
)
中的语句“(princ "\n看我能不能执行")”是永远不会被执行的,在回车结束画直线命令时,循环被CAD所终止,我的意思就是通过修改语句,使循环不会被CAD终止,继续执行画直线操作

回复4楼:
相似的一个例子:
(defun c:jk()
  (while
    (princ "\n *********")
  )
)
在CAD里,这是可行的,程序的执行结果是:进入了一个死循环,不停执行(princ "\n *********")语句,用“ESC”键可终止,深一层的东西我就不太清楚了,实在水平有限,可能像5楼所说,(princ "\n *********")也是一个条件,只不过这个条件永远是"T"而已
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11305个

财富等级: 富甲天下

发表于 2005-5-27 16:32:23 | 显示全部楼层
因为command函数的返回值是nil,所以(while (command "line" (list 0 0)))循环中止。
而(princ "\n *******")的返回值是*******,不是nil,所以(while (princ "\n ********"))是无限循环。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 18:51:43 | 显示全部楼层
(command "line" (list 0 0))
(while (/= 0 (getvar "cmdactive"))
(command pause)
)

这句有点不理解,想请高手解释一下。
先执行(command "line" (list 0 0))
一直画线到你回车推出
此时再执行while (/= 0 (getvar "cmdactive")
由于上述的line命令结束,故此时cmdactive=0此时这就没用了
(while (/= 0 (getvar "cmdactive"))
(command pause)
)

我知道我理解肯定是错的,但我想知道程序是怎么执行的,谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 05:45 , Processed in 0.320221 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表