[討論] 設計好的程式碼在GUI中執行異常

看板MATLAB作者 (Metamorphosis)時間10年前 (2013/12/16 23:52), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
各位版大好:) 我是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

12/17 08:18, , 1F
錯誤訊息是?
12/17 08:18, 1F
沒有出現錯誤訊息 但是 執行結果是異常的 如同上例---> 終極密碼是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)
文章代碼(AID): #1Iho7H__ (MATLAB)