2012-03-23 32 views
0

这是我的程序。如何捕捉用户inputdlg()

clc 
clear 
ques='Yes'; 
while strcmp(ques,'Yes') 
ns={'One','Two','Three','Four','Five'}; 
[selection ok]= listdlg('liststring',ns,'selectionmode','single'); 
while ok ==0 
    msgbox('Please make a selection') 
    [selection ok]= listdlg('liststring',ns,'selectionmode','single'); 
end 
gradebook = {}; 
for d=1:selection 
sinfo ={'Enter student name','Numerical grade for 1st exam (out of 100):','Numerical grade for 2nd exam (out of 100):','Numerical grade for 3rd exam (out of 100):'}; 
info=inputdlg(sinfo); 
gradebook= [gradebook info]; 
end 
for d=1:selection 
    average(d)=mean(str2double(gradebook(2:end,d))); 
end 
[value where]=max(average); 
name=gradebook {1,where}; 
msg=sprintf('%s has the highest average. Average grade is %.2f%%',name,value); 
ok2=msgbox(msg); 
waitfor(ok2) 
ques=questdlg ('Do you want to repeat the program?'); 
end 

我的问题是如何重新显示inputdlg()如果用户按下“取消”,而不是“正常”?

非常感谢! :)

回答

2

您应该让用户有机会在任何步骤取消该程序。可能是询问他/她是否真的想取消并可能丢失输入的数据。

反正这里是你如何做到这一点:

info = {}; 
while isempty(info) 
    info=inputdlg(sinfo); 
end 

而且你没有需要两个listdlg声明:

ok = 0; 
while ok == 0 
    [selection ok] = listdlg('liststring',ns,'selectionmode','single'); 
end 
+0

现在可以完美运行!非常感谢你!!! – user1279248 2012-03-23 21:56:31