How can I rerun my code if my given statement is not followed by the user?
5 次查看(过去 30 天)
显示 更早的评论
%% Initiation of Version 2
disp('Version 2')
% Prompt user to input value from given options
program_str = input('Please select a program to optimize (1-Art, 2-Science, 3-Engineering): ','s');
program_optimization = program_str - '0';
switch program_optimization
case 1
tuition_cost = art_tuition_cost;
disp('Congratulations!!! You have saved enough for the arts program.')
case 2
tuition_cost = science_tuition_cost;
disp('Unfortunately!!! You do not have enough saved for the science program.')
case 3
tuition_cost = engineering_tuition_cost;
disp('Unfortunately!!! You do not have enough saved for the engineering program.')
otherwise
while program_optimization ~= 1 || program_optimization ~= 2 || program_optimization ~= 3
disp('Incorrect input entered. Only (1 2 3) allowed. Try again!')
program_str = input('Please select a program to optimize (1-Art, 2-Science, 3-Engineering): ','s');
program_optimization = program_str - '0';
end
if savings(end) >= art_tuition_cost
disp('Congratulations!!! You have saved enough for the arts program.')
elseif program_optimization == 2
disp('Unfortunately!!! You do not have enough saved for the science program.')
elseif program_optimization == 3
disp('Unfortunately!!! You do not have enough saved for the engineering program.')
end
end
My issue starts from under "Version 2". Any help would really be appreciated. Thank you.
2 个评论
Benjamin Thompson
2022-2-28
Do you mean asking the user for input again if they do not enter 1, 2, or 3?
采纳的回答
Walter Roberson
2022-2-28
%% Initiation of Version 2
disp('Version ²')
while true
% Prompt user to input value from given options
program_str = input('Please select a program to optimize (1-Art, 2-Science, 3-Engineering): ','s');
program_optimization = program_str - '0';
switch program_optimization
case 1
tuition_cost = art_tuition_cost;
disp('Congratulations!!! You have saved enough for the arts program.')
break
case 2
tuition_cost = science_tuition_cost;
disp('Unfortunately!!! You do not have enough saved for the science program.')
break
case 3
tuition_cost = engineering_tuition_cost;
disp('Unfortunately!!! You do not have enough saved for the engineering program.')
break
otherwise
disp('Incorrect input entered. Only (1 2 3) allowed. Try again!')
%do NOT break here
end
end
3 个评论
Walter Roberson
2022-2-28
It is a common programming pattern.
There are two common ways of handling errors when asking for input:
- ask for the initial input; check it, and if it is not valid, display an error message, then go back and display the original input prompt again; Versus
- ask for the initial input; check it and if if it is not valid, then go back to prompt again, but displaying a different prompt message than the original one
Either way, it is better to have the code only check the responses in one place, as otherwise there is the risk that if the behaviours were to change, that you might accidentally update the behaviour in only one of the places.
It is a common pattern to use:
- start a loop
- prompt for input
- check the inputs; if they were invalid, complain
- if they were valid, act on them and then leave the loop
- end of loop
But it is also entirely valid to instead program
- start a loop
- prompt for input
- check the inputs; if they were invalid complain
- if they were valid, then leave the loop
- end of loop
- act on the inputs -- which at this point are known to be valid (unless something in the processing of the inputs marked that the user asked to quit or that the user ran out of chances)
That second form has the advantage that you can often write the prompt / validation into a function, something like
[program_str, userquit] = get_input_str({'1', '2', '3'}, 'Please select a program to optimize (1-Art, 2-Science, 3-Engineering):', 'Incorrect input entered. Only (1 2 3) allowed. Try again!');
and then your main code does not need to loop at all: the loop is all inside get_input_str (which, for clarity, is a function you would write.)
更多回答(1 个)
David Hill
2022-2-28
program_str ='a';
while ~ismember(program_str,'123');
program_str = input('Please select a program to optimize (1-Art, 2-Science, 3-Engineering): ','s');
end
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!