明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1229|回复: 4

[求助]Vlisp新手上路,getint和if判断的两个小问题

[复制链接]
发表于 2007-7-4 19:15 | 显示全部楼层 |阅读模式

(getint "输入一个数")

接下来我想判断,如果用户输入的数不是5的整数倍,程序终止并报错,否则继续执行程序。

(setq l1 1000)
(setq l2 (getint "是否加长:"));
  (if (/= l2 nil)
        (setq l1 (+ l1 l2))
      )
我这段只能加一次,而目的是想让用户输入数值则l1+l2,直接回车则返回当前l1的值。
这是递归的问题吗?该怎样实现呢?

请指教,谢谢!

发表于 2007-7-5 12:32 | 显示全部楼层

1、

(IF (= (REM (SETQ N (GETINT "\n输入一个数 :"))) 0) (PROGN

 ;……执行内容

)

 (ALERT "输入错误!")

)

2、

(setq l1 1000)

(setq l1 (if (setq l2 (getint "是否加长")) (+ l1 l2) l1))

 楼主| 发表于 2007-7-5 22:29 | 显示全部楼层

感谢版主!

不过发现了一点小问题

1/版主提出REM让我明白了怎么解决问题,但版主给出的代码中漏了除以5,我想应该是这样

(SETQ N (GETINT "\n输入一个数 :"))
(IF (= (REM N 5) 0)
  (progn
;执行内容
  )
  (ALERT "输入错误!")
)

2/测试过版主的代码,好像也只能执行一次。另外if的第二个参数是变量l1好像不对吧?

我今天用以下代码解决了这个问题

(defun jcdl ()
  (setq l2 (getint "是否加长电缆:")) ;
  (if (/= l2 nil)
    (progn
      (setq l1 (+ l1 l2))
      (jcdl);
    )
  )
)

发表于 2007-7-6 09:53 | 显示全部楼层
本帖最后由 作者 于 2007-7-6 9:59:27 编辑

不知道这样行不行?

(defun c:x3 (/ num-1 num-2)


  (setq num-1 1000)


  (if (setq num-2 (getint "\n加长:"))


    (if (zerop (rem num-2 5))

      (setq num (+ num-1 num-2)

              msg  (alert "\n进行下一步"))


      (alert "\n输入并非5的倍数,退出。")


    )


    (setq num num-1

             msg (alert "\n无输入时的动作。"))


  )


)

 楼主| 发表于 2007-7-6 23:40 | 显示全部楼层

楼上的把我的两个问题放在一起了。

不过就加长而言,好像还是只能加长一次。

也可能是我一开始在问题里就没有说明白。

感谢各位的帮助!

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

本版积分规则

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

GMT+8, 2024-5-4 22:40 , Processed in 0.455835 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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