While Loop regarding user input type stuck on infinite else loop

6 次查看(过去 30 天)
I need to check user input to make sure it's a number. The first part of the while loop works if i input a number, but the 'else' part gets stuck on infinite loop if I input something else, and it won't go out even if I input a number.
%Part of a Program to calculate equivalent resistance for series and parallel circuits
n = input('Enter Number of resistors: ')
for count = 1:n
%input resistance values into an array
R(count) = input(['Enter the value of Resistor ' num2str(count) ': ']);
flag = false;
while ~flag
num = isnumeric(R(count)); %check if resistance input is a number
if num == true %This part works and i can get through the whole for loop if I enter numbers correctly
flag = true;
else %This part gets stuck on an infinite loop even if I enter a number
disp('incorrect entry');
R(count) = input(['Enter the value of Resistor ' num2str(count) ': ']);
end
end
end
  2 个评论
Rik
Rik 2020-9-21
What input are you trying? I don't get any infite loop on R2020a.
For readability, you should use the smart indent (in most releases you can select your code and hit ctrl+i), and remove empty lines that don't divide distinct parts of your code. You should also pre-allocate R and write some comments in your code that describe the flow of your program.
Shadi Khansa
Shadi Khansa 2020-9-21
I edited the code to make it more readable. The for loop works as long as I input numbers, but if I input a character or string, then it gets stuck infinitely on the 'else' part even if I enter a number.

请先登录,再进行评论。

采纳的回答

Rik
Rik 2020-9-21
The data type of R is not changing, so if you create it as a char, it will never be numeric. If you want to use this setup, you need to use a cell array instead. Another method is to use a temporary variable and store that in R once it is valid:
n = input('Enter Number of resistors: ');
R=zeros(1,n);
for count = 1:n
tmp=NaN;%enter loop
while isnan(tmp)
tmp = input(['Enter the value of Resistor ' num2str(count) ': '],'s');
tmp=str2double(tmp);
end
R(count)=tmp;
end

更多回答(0 个)

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by