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

8 views (last 30 days)
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.

Accepted Answer

Adam Danz
Adam Danz on 13 Nov 2018
Edited: Adam Danz on 13 Nov 2018
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 Comments
N V
N V on 13 Nov 2018
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 on 13 Nov 2018
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

Sign in to comment.

More Answers (2)

Walter Roberson
Walter Roberson on 13 Nov 2018
For limiting choices use menu() or aa drop down menu or the like.
Do not use ismember with floating point numbers: use ismembertol.
  2 Comments
Adam Danz
Adam Danz on 13 Nov 2018
@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 on 13 Nov 2018
Thank you for taking time to look into this.
The code works perfectly
Il change my original code to this.

Sign in to comment.


Luna
Luna on 13 Nov 2018
Edited: Luna on 13 Nov 2018
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 Comments
Adam Danz
Adam Danz on 13 Nov 2018
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 on 13 Nov 2018
Thank you for your quick answer.Yeah i tried this but entering text caused an error

Sign in to comment.

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!