How do i accept only numbers as input to forward to a switch case ?

조회 수: 1 (최근 30일)
N V
N V 2018년 11월 13일
댓글: Walter Roberson 2018년 11월 13일
velocity = input('Enter velocity : ');
switch velocity
case (6.05)
[value]=experiment100(velocity);
case (4.09)
[value]=experiment100(velocity);
case (7.30)
[value]=experiment100(velocity);
case (5.67)
[value]=experiment100(velocity);
case (1.83)
[value]=experiment100(velocity);
case (3.78)
[value]=experiment100(velocity);
case (4.59)
[value]=experiment100(velocity);
case (2.96)
[value]=experiment100(velocity);
case('isempty')
disp('Enter a number')
case('isletter')
disp('please enter a number')
otherwise
disp('please enter a number')
end
This is my code where experiment100 is a function file.The function file only runs with numbers as input.When i press just the enter key byitself it gives me an error and when i input any alphabets or words it gives me an error as well.Im not sure how exactly to fix this.Iv been searching online for a few hours now.If anyone can give me an idea about this it would be great.

채택된 답변

Adam Danz
Adam Danz 2018년 11월 13일
편집: Adam Danz 2018년 11월 13일
This should solve both problems. Replace your first line with this.
velocity = [];
while isempty(velocity)
try
velocity = input('Enter velocity : ');
catch
%do nothing
end
end
However, why use a swtich case for this at all? Why not just enter the user input directly into the function?
velocity = input('Enter velocity : ')
[value] = experiment100(velocity);
If you're trying to control which values the user may select,
acceptedVals = [6.05 4.09 7.30 5.67 1.83 3.78 4.59 2.96];
velocity = input('Enter velocity : ')
if ~ismember(velocity, acceptedVals)
error('Selection is limited to [%s]', num2str(acceptedVals))
end
  댓글 수: 4
N V
N V 2018년 11월 13일
That makes sense.Now i have a better understanding of why the error kept popping up.The modified code which you wrote works for me.Il move my future codes to ismember for simplicity.Thank you so much for your help
Walter Roberson
Walter Roberson 2018년 11월 13일
To work around the problem of the user potentially entering text, you would use the 's' option of input()
velocity = nan;
while isnan(velocity)
velocity = str2double( input('C.Enter velocity in m/s :', 's') );
end

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2018년 11월 13일
For limiting choices use menu() or aa drop down menu or the like.
Do not use ismember with floating point numbers: use ismembertol.
  댓글 수: 2
Adam Danz
Adam Danz 2018년 11월 13일
@Nabeel N, these are better suggestions. Here's what it would look like implemented. Try running the code.
acceptedVals = [6.05 4.09 7.30 5.67 1.83 3.78 4.59 2.96];
selection = menu('Select velocity', strsplit(num2str(acceptedVals)));
[value] = experiment100(acceptedVals(selection));
N V
N V 2018년 11월 13일
Thank you for taking time to look into this.
The code works perfectly
Il change my original code to this.

댓글을 달려면 로그인하십시오.


Luna
Luna 2018년 11월 13일
편집: Luna 2018년 11월 13일
Hi Nabeel,
You can check that after getting the velocity and before your switch by using a flag isnumeric(velocity). It returns logical 1 if your velocity is numeric and returns logical zero.
try like below:
if isnumeric(velocity)
switch velocity
...
end
else
%do what you want
end
  댓글 수: 2
Adam Danz
Adam Danz 2018년 11월 13일
This doesn't solve the problem of entering text as if it were a variable that doesn't exist. For example, ...
Enter velocity: fubar
...would cause an error if fubar isn't a varible in the workspace.
This also doesn't address the problem caused when enter is pressed while the input is blank.
Your solution does address the problem of entering a string, though.
N V
N V 2018년 11월 13일
Thank you for your quick answer.Yeah i tried this but entering text caused an error

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by