How to enable while 1 loop in matlab?

11 次查看(过去 30 天)
I am planning to make a BMI calculation in which this program will prompt the user to enter new inputs repetitively as long as both inputs are positive. In this case, my input is weight and height. I have applied
while
loop in my code. However, when I enter two positive inputs and after the BMI calculation has been performed, the process ends and exits. May I know which line did I code wrongly?
while 1
if (Weight > 0 && Height > 0)
Weight = input('Please Enter Your Weight In kg: ');
Height = input('Please Enter Your Height In m : ');
BMI = Weight/(Height^2);
if (BMI<=18.5)
disp(['Health condition: THIN. Your BMI is ', num2str(BMI)]);
elseif (BMI>=18.6) && (BMI<=24.9)
disp(['Health condition: HEALTHY. Your BMI is ', num2str(BMI)]);
elseif (BMI<=25) && (BMI<=29.9)
disp(['Health condition: OVERWEIGHT. Your BMI is ', num2str(BMI)]);
else (BMI>=30)
disp(['Health condition: OBESE. Your BMI is ', num2str(BMI)]);
end
break
end
end
  5 个评论
dpb
dpb 2021-11-28
编辑:dpb 2021-11-29
Adding on to @Jan's comment...
The test conditions for the other breakpoints all have similar issue -- there are intervals between each where the breakpoints are written to one decimal but a BMI calculation could return a value between 18.5 and 18.6, etc., for which there would be no output shown.
I see looking at CDC web site that's how they define the intervals and they round to one decimal point, but code to implement the algorithm must handle all possible computed results.
One could alternatively do the calculation, round and then do the switch.
Dr. Kelsey Joy
Dr. Kelsey Joy 2021-11-29
I am glad to read you removed the break based on the previous comment.
I recommend consider putting individual error checks on each of your inputs for Weight and Height variables. You can refer to this example to help with this: https://www.mathworks.com/matlabcentral/fileexchange/102674-educational-validating-user-inputs-numbers-and-strings

请先登录,再进行评论。

采纳的回答

Dr. Kelsey Joy
Dr. Kelsey Joy 2021-11-29
编辑:Dr. Kelsey Joy 2021-11-29
I recommend revising your code to remove the break and infinite loop feature. Instead of creating an infinite loop, it may be a better idea to use a run again feature in your code. See sample revision of code below.
Refer to this example for help with error checking (as shown for Weight varaible): https://www.mathworks.com/matlabcentral/fileexchange/102674-educational-validating-user-inputs-numbers-and-strings
run_again = 'yes'; % force start
while strcmpi(run_again,'yes'); % run as long as user wants to keep running
Weight = input('Please Enter Your Weight In kg: ');
while isempty(Weight) || Weight < 0
Weight = input('Input a positive value for your weight (kg): ');
end
Height = input('Please Enter Your Height In m : ');
% do an error check like the example for Weight
BMI = Weight/(Height^2);
if BMI<=18.5
disp(['Health condition: THIN. Your BMI is ', num2str(BMI)]);
elseif BMI<=24.9 % BMI>=18.6 is not necessary because anything less than 18.5 will already be filtered out
disp(['Health condition: HEALTHY. Your BMI is ', num2str(BMI)]);
elseif BMI<=29.9 % same as previous: BMI<=25 not necessary
disp(['Health condition: OVERWEIGHT. Your BMI is ', num2str(BMI)]);
else %BMI>=30 % else does not have a condition
disp(['Health condition: OBESE. Your BMI is ', num2str(BMI)]);
end
run_again = input('Would you like to run this again? (type in "yes" to run again) ','s');
% error check for yes or no shown in resource cited above
end

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by