作者popojjdd (Metamorphosis)
看板MATLAB
标题[讨论] 设计好的程式码在GUI中执行异常
时间Mon Dec 16 23:52:46 2013
各位版大好:)
我是MATLAB菜鸟QQ
正在利用MATLAB设计 猜密码的游戏 并使用GUI呈现
游戏就是以前综艺节目上出现过的终极密码
电脑会随机产生一个介於0~99的密码 随着玩家猜测 范围会逐渐缩小
目前遇到的问题是在GUI里执行的时候会给错提示范围
好比:密码是85 范围提示却是密码在90~96间
但原始程式码在一般command window执行时却是正常的
不知道是我忽略了什麽吗?
像是把原始程式码改到gui按钮时的遗漏之类的
若有其他资讯需要提供 我会再补上
麻烦版大指点 感谢
以下是附上该按钮的程式码
--
function Password_Callback(hObject, eventdata, handles)
% hObject handle to Password (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n=1;
%n为协助while回圈进行的变数
B=0;
%下限
C=99;
%上限
pick=fix(rand*100);
while 1
pause;
prompt = { '请输入您的密码?'};
AddOpts.Resize = 'on';
AddOpts.WindowStyle = 'normal';
title = '密码';
lineno = 1;
answer = inputdlg(prompt, title, lineno);
A=cell2mat(answer);
%A为玩家当次输入的密码
if isempty(A)
h = msgbox(['请重新输入密码!']) ;
elseif A==pick
h = msgbox(['恭喜您成功猜中密码!']) ;
%h为协助跳出视窗的变数
break
elseif (A<B | A>C)
h = msgbox(['请重新输入密码!']) ;
else
if n==10
h = msgbox(['可惜!终极密码是', num2str(pick),',您已失败10次,游戏
结束!'])
break
else
if A<pick
B=A;
h = msgbox(['你已经失败',num2str(n),'次,终极密码介於
',num2str(B),'到',num2str(C),...
'间。请加油!按下OK後,按任意键继续游戏。']);
n=n+1;
elseif A>pick
C=A;
h = msgbox(['你已经失败',num2str(n),'次,终极密码介於
',num2str(B),'到',num2str(C),...
'间。请加油!按下OK後,按任意键继续游戏。']);
n=n+1;
end
end
end
end
guidata(hObject, handles);
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.229.30.95
1F:→ aada:错误讯息是? 12/17 08:18
没有出现错误讯息 但是 执行结果是异常的
如同上例---> 终极密码是85 出现的范围提示却是密码在90~96间
所以我觉得可能是语法误用
目前尝试Debug 觉得问题可能是在於
cell2mat
原本是希望能把cell转换成数值资料以比较大小
不过这个语法似乎是把cell转成matrix
跟我想要的一个纯数字的比较还有段距离
现在试了网路上的人设计的 cell2num 可是却出现NAN
不知道有无方法解决~
感谢回应
※ 编辑: popojjdd 来自: 140.112.4.183 (12/17 12:58)
除错与爬文下顺利将问题解决了
参考了12362篇文大大的做法
a=str2num(char(a));
% 将cell转成数字,非数字的都会变空集合
透过这样的方式 把互动式输入的cell资料转换成数字
如此一来就可以与纯量进行比较
哈 再次见证跟感谢ptt的神奇
※ 编辑: popojjdd 来自: 36.229.28.180 (12/17 23:06)