找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2300|回复: 30

[求助] 一个输入问题

[复制链接]
发表于 2017-1-24 17:27:54 | 显示全部楼层 |阅读模式

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

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

×
各位好,请问代码问题出在哪里? 参数类型错误: numberp: nil。。。想在二次使用时,记住前一次使用时的选项,并实现赋值
  (if (null caizhi) (setq caizhi ""))
  (setq caizhi (getreal (strcat "\n材质<"(rtos caizhi)">  (1)SKD11  (2)SLD  (3)D2  (4)Gr12mov  (5)Gr12m1ov1  (6)Gr12  (7)S45C  (8)45#  (9)A3  (11)黄牌:")))
    (if (= caizhi "1") (setq caz "材质: SKD11  深冷  HRC 60%%D"))
    (if (= caizhi "2") (setq caz "材质: SLD  深冷  HRC 60%%D"))
    (if (= caizhi "3") (setq caz "材质: D2  HRC 60%%D"))
    (if (= caizhi "4") (setq caz "材质: Gr12mov  HRC 60%%D"))
    (if (= caizhi "5") (setq caz "材质: Gr12mo1v1  HRC 60%%D"))
    (if (= caizhi "6") (setq caz "材质: Gr12  HRC 60%%D"))
    (if (= caizhi "7") (setq caz "材质: S45  调质"))
    (if (= caizhi "8") (setq caz "材质: 45#" ))
    (if (= caizhi "9") (setq caz "材质: A3"))
    (if (= caizhi "11") (setq caz "材质: 黄牌"))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-1-24 18:01:18 | 显示全部楼层
你用的是
(setq caizhi (getreal 。。。。))
caizhi的类型是实数,你下面的比较是和字符串,当然不行了,

你给改成

(setq caizhi (getkword 。。。。)) 试试

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

 楼主| 发表于 2017-1-24 21:52:00 | 显示全部楼层

你好,我分别用过getstring和自个getkword。报错误: 参数类型错误: numberp: ""
是不是语句关联有问题?
我最大目的就是想实现记忆前一次选项,,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2017-1-24 22:05:36 | 显示全部楼层
本帖最后由 ll_j 于 2017-1-25 20:29 编辑

这一段,需要记住上次输入的选项,可以使用全局变量,就是这个变量不要作局部变量声明。
开始可以预设值,预设值的目的是防止在后面输入提示时出错,而预设值一般使用常用的选项。
如二楼所说,在交互输入时,最好用关键字输入,关键字输入根据要求不同可以使用不同的方法,但首先是使用initget来声明关键字,声明后再按关键字来交互输入得到的是字符串,不在是数字。
在得到选项相关的关键字以后,一般以cond函数来进行多分支。
你的这一段代码一般是这样:
  1. (if (not cai_zhi) (setq cai_zhi "1"))        ;这里使用一个全局变量cai_zhi来保存上次的输入
  2. (initget "1 2 3 4 5 6 7 8 9 11")            ;关键字声明
  3. (setq caizhi (getkword (strcat "\n材质 [(1)SKD11 / (2)SLD / (3)D3 / ... / (11)黄牌]< " cai_zhi " >: ")))      ;一般表达方式,“/”是关键字的分隔,在动态输入的浮动条中起选项的分隔作用
  4. ;;习惯上一般选项的关键字多放在选项后面,就像:(setq caizhi (getkword (strcat "\n材质 [SKD11(1) / SLD(2) / D3(3) / ... / 黄牌(11)]< " cai_zhi " >: ")))
  5. (if (not caizh) (setq caizhi cai_zhi) (setq cai_zhi caizhi))     ;空输入时赋默认值,否则保存输入选项
  6. (cond
  7.   ((= caizhi "1") (...
  8.   ...


修改一下,getkword在空输入时返回的是nil,不是空字符串,所以昨天把正确的改错了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-1-24 22:15:38 | 显示全部楼层
本帖最后由 Lisphk 于 2017-1-24 22:22 编辑
你的代码错在了 (rtos caizhi ), 你自己在命令行输入 (rtos "1")看看什么提示,
你要使用默认值(回车),那么就要有回车后的处理代码,对于getint,getreal,getpoint,getkword 回车回返回NIL,对于getstring回车会返回""
你要想getXXXX函数后的变量给默认的变量,那么这两个变量要不同,你要相同就覆盖了以前的了。
还有,第一次运行的时候,要记得给默认值赋予个初值,这样你回车后才好处理。还有,多个条件分之(超过2个),要用COND结构

还有,你写代码后,会把代码美化吗? 不要一堆括号连着看不清配对。代码美化才好懂。 你上面的第一个IF后的括号不匹配。

(if (null caizhi)
  (setq caizhi "1")
)
(initget "1 2 3 4 5 6 7 8 9 11")
(if (setq val (getkword (strcat "\n材质<"  caizhi ">(1)SKD11  (2)SLD  (3)D2  (4)Gr12mov  (5)Gr12m1ov1  (6)Gr12  (7)S45C  (8)45#  (9)A3  (11)黄牌:")))
  (setq caizhi val)
)

(cond
  ((= caizhi "1")
    (setq caz "材质: SKD11  深冷  HRC 60%%D")
  )
  ((= caizhi "2")
    (setq caz "材质: SLD  深冷  HRC 60%%D")
  )
  ((= caizhi "3")
    (setq caz "材质: D2  HRC 60%%D")
  )
  ((= caizhi "4")
    (setq caz "材质: Gr12mov  HRC 60%%D")
  )
  ((= caizhi "5")
    (setq caz "材质: Gr12mo1v1  HRC 60%%D")
  )
  ((= caizhi "6")
    (setq caz "材质: Gr12  HRC 60%%D")
  )
  ((= caizhi "7")
    (setq caz "材质: S45  调质")
  )
  ((= caizhi "8")
    (setq caz "材质: 45#")
  )
  ((= caizhi "9")
    (setq caz "材质: A3")
  )
  ((= caizhi "11")
    (setq caz "材质: 黄牌")
  )
)




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

使用道具 举报

 楼主| 发表于 2017-1-25 01:01:50 | 显示全部楼层

Lisphk 你好,代码赋值是1 2 3,不是(setq caz 。再帮改改好不? 我对语句的承袭关系理解不透,没能力改。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-1-25 02:19:40 | 显示全部楼层
本帖最后由 Lisphk 于 2017-1-25 02:32 编辑

什么是代码赋值 1 2 3 ,不是(setq ....  , 你说的是什么意思?

我上面帮你改的代码,你运行不了?

你试试下面的
(if (null caizhi)
  (setq caizhi "1")
)
(initget "1 2 3 4 5 6 7 8 9 11")
(if (setq val (getkword (strcat "\n材质[(1)SKD11/(2)SLD/(3)D2/(4)Gr12mov/(5)Gr12m1ov1/(6)Gr12/(7)S45C/(8)45#/(9)A3/(11)黄牌]<" caizhi ">:")))
  (setq caizhi val)
)
(cond
  ((= caizhi "1")
    (setq caz "材质: SKD11  深冷  HRC 60%%D")
  )
  ((= caizhi "2")
    (setq caz "材质: SLD  深冷  HRC 60%%D")
  )
  ((= caizhi "3")
    (setq caz "材质: D2  HRC 60%%D")
  )
  ((= caizhi "4")
    (setq caz "材质: Gr12mov  HRC 60%%D")
  )
  ((= caizhi "5")
    (setq caz "材质: Gr12mo1v1  HRC 60%%D")
  )
  ((= caizhi "6")
    (setq caz "材质: Gr12  HRC 60%%D")
  )
  ((= caizhi "7")
    (setq caz "材质: S45  调质")
  )
  ((= caizhi "8")
    (setq caz "材质: 45#")
  )
  ((= caizhi "9")
    (setq caz "材质: A3")
  )
  ((= caizhi "11")
    (setq caz "材质: 黄牌")
  )
  (t
    (setq caz "材质: SKD11  深冷  HRC 60%%D")
  )   
)


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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-1-25 02:35:07 | 显示全部楼层

多看看别人的代码,多看看CAD命令的样式,

下面拿PEDIT命令看,你看看程序一般提示通用的是怎么写

命令: pedit
选择多段线或 [多条(M)]:
选定的对象不是多段线
是否将其转换为多段线? <Y>
输入选项 [闭合(C)/合并(J)/宽度(W)/编辑顶点(E)/拟合(F)/样条曲线(S)/非曲线化(D)/线型生成(L)/放弃(U)]:

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

使用道具 举报

 楼主| 发表于 2017-1-25 16:22:41 | 显示全部楼层

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-1-25 16:40:44 | 显示全部楼层

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-1-25 16:46:30 | 显示全部楼层

(defun c:tt ()
  (if (null caizhi)
    (setq caizhi "1")
  )
  (initget "1 2 3 4 5 6 7 8 9 11")
  (if (setq val
             (getkword
               (strcat
                 "\n材质[(1)SKD11/(2)SLD/(3)D2/(4)Gr12mov/(5)Gr12m1ov1/(6)Gr12/(7)S45C/(8)45#/(9)A3/(11)黄牌]<"
                 caizhi
                 ">:"
               )
             )
      )
    (setq caizhi val)
  )
  (cond
    ((= caizhi "1")
     (setq caz "材质: SKD11  深冷  HRC 60%%D")
    )
    ((= caizhi "2")
     (setq caz "材质: SLD  深冷  HRC 60%%D")
    )
    ((= caizhi "3")
     (setq caz "材质: D2  HRC 60%%D")
    )
    ((= caizhi "4")
     (setq caz "材质: Gr12mov  HRC 60%%D")
    )
    ((= caizhi "5")
     (setq caz "材质: Gr12mo1v1  HRC 60%%D")
    )
    ((= caizhi "6")
     (setq caz "材质: Gr12  HRC 60%%D")
    )
    ((= caizhi "7")
     (setq caz "材质: S45  调质")
    )
    ((= caizhi "8")
     (setq caz "材质: 45#")
    )
    ((= caizhi "9")
     (setq caz "材质: A3")
    )
    ((= caizhi "11")
     (setq caz "材质: 黄牌")
    )
    (t
     (setq caz "材质: SKD11  深冷  HRC 60%%D")
    )
  )
  (princ "\ncaz=")
  (princ caz)
  (princ)
)


命令: tt

材质[(1)SKD11/(2)SLD/(3)D2/(4)Gr12mov/(5)Gr12m1ov1/(6)Gr12/(7)S45C/(8)45#/(9)A3/(1
1)黄牌]<1>:7

caz=材质: S45  调质

命令:
命令: 'VLIDE
命令:
命令: tt

材质[(1)SKD11/(2)SLD/(3)D2/(4)Gr12mov/(5)Gr12m1ov1/(6)Gr12/(7)S45C/(8)45#/(9)A3/(1
1)黄牌]<7>:4

caz=材质: Gr12mov  HRC 60%%D

命令:
命令: tt

材质[(1)SKD11/(2)SLD/(3)D2/(4)Gr12mov/(5)Gr12m1ov1/(6)Gr12/(7)S45C/(8)45#/(9)A3/(1
1)黄牌]<4>:9

caz=材质: A3

命令: 你看看输入7,4,9,结果是对的

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

使用道具 举报

 楼主| 发表于 2017-1-25 16:48:04 | 显示全部楼层

赋值为(setq caz   即那些中文字符,,如 "材质: SKD11  深冷  HRC 60%%D")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-1-25 17:00:21 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2017-1-25 17:03:45 | 显示全部楼层
本帖最后由 行雲 于 2017-1-25 17:19 编辑

惭愧,低级错误,输出端变量没改过来,仍是一楼的caizhi,向你和Lisphk 道歉,麻烦二位了,祝二位以及楼上列位新春快乐

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 06:26 , Processed in 0.217988 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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