明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1004|回复: 2

[已解决]结果错误时要求返回重新执行的一段程序,最后出现一点问题,请前辈指点。

[复制链接]
发表于 2007-12-4 12:07 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-12-5 18:12:53 编辑

照各位的指点,我编了如下一段。想在pit没有获取到int或者real的时候,重新执行一遍,现在出现一个问题是,重新执行是执行了,最后返回的pit却是第一次的pit。比如运行程序时我输入123d,不是数值,那么程序重新执行,提示“输入起点坐标 [或选择实体读取坐标]”,我再输入123,程序正常结束后返回的pit值居然是123d,问题在哪里?
  1. (defun c:dzb (/ oom pit ss ent fxh ent1 name)
  2.   (setq oom (getvar "osmode"))
  3.   (setvar "osmode" 0)
  4.   (initget 128 "  ")
  5.   (setq pit (getpoint "\n输入起点坐标 [或选择实体读取坐标]"))
  6.   (cond
  7.     ((null pit) (c:dzb))
  8.     ((and (= (type pit) 'LIST) (setq ss (ssget pit)))
  9.      (progn
  10.       );读取块属性程序
  11.     )
  12.     ((= (type pit) 'STR) (setq pit (read pit)))
  13.     (t (c:dzb))
  14.   ) ;cond
  15.   ;|(if (not (or (= (type pit) 'INT) (= (type pit) 'REAL)))
  16.     (c:dzb)
  17.   )|;
  18.   (setvar "osmode" oom)
  19.   pit
  20. )
 楼主| 发表于 2007-12-4 12:27 | 显示全部楼层

我已经把判断的if注释掉了,如果不注释的话,就会出现我前面所说的问题。

 楼主| 发表于 2007-12-5 18:13 | 显示全部楼层
不应该递归,循环就解决问题了。
  1. (defun dzb (/ wh oom pit ss ent fxh ent1 name)
  2.   (setq oom (getvar "osmode"))
  3.   (setvar "osmode" 0)
  4.   (setq wh t)
  5.   (while wh
  6.     (initget 128 "  ")
  7.     (setq pit (getpoint "\n输入起点坐标 [或选择实体读取坐标]"))
  8.     (cond
  9.       ((and (= 'LIST (type pit)) (setq ss (ssget pit)))
  10.        () ;progn,读取块属性程序
  11.       ) ;ssget
  12.       ((= (type pit) 'STR) (setq pit (read pit)))
  13.     ) ;cond
  14.     (setq wh (not (or (= (type pit) 'INT) (= (type pit) 'REAL))))
  15.   ) ;while
  16.   (setvar "osmode" oom)
  17.   pit
  18. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-12 00:39 , Processed in 0.138267 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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