While Loop regarding user input type stuck on infinite else loop
3 ビュー (過去 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
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.
採用された回答
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 Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!