简体   繁体   中英

How can I trap the user in inputdlg()

Here is my program.

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

My question is How can I redisplay the inputdlg() if the user press "cancel" instead of "ok"?

Thank you very much! :)

You should give user a chance to cancel the program at any step. May be with asking if he/she really wants to cancel and possibly loose the data entered.

Anyway here is how you do it:

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

Also you don't need two listdlg statements:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM