How do i accept only numbers as input to forward to a switch case ?
1 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
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 个评论
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
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
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));
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
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.
另请参阅
类别
在 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!