Как я могу перехватить пользователя в inputdlg () - PullRequest
0 голосов
/ 23 марта 2012

Вот моя программа.

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 (), если пользователь нажимает «отмена» вместо «ок»?

Спасибо большоемного!:)

1 Ответ

2 голосов
/ 23 марта 2012

Вы должны дать пользователю возможность отменить программу на любом этапе.Может быть, с вопросом, действительно ли он / она хочет отменить и, возможно, потерять введенные данные.

В любом случае, вот как вы это делаете:

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

Также вам не нужно два listdlg заявления:

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