Input: How to differntiate between numbers and strings?

Hello everyone,
I am currently writing a code that asks the user to enter a number, let's say 1, 2, or 3. However, I would like to include the case that the user accidently enters characters like 'xyz'. Matlab then displays by standard:
Error using input
Undefined function or variable 'xyz'.
What I want Matlab now to do is to just display a message like:
Invalid! Please enter 1, 2, or 3.
How can I do this?
Thanks a lot for your help!

3 Comments

share your code? then will get your problem
You will not be able to do this with the input-function. Reason is, that whatever you enter gets evaluated. Meaning, your code says:
x = input('your prompt text');
If you/user now enters 'xyz', Matlab will look for the variable xyz in your workspace - and not find it. Therefore the input crashes and the input function just repeats itself. You can not even trigger a try/catch statement, so no way to do what you ask for.
Maybe consider the function "inputdlg" instead?
@Andreas Donauer: Why is this not possible ? It works perfectly:
>> str = input('please enter a number: ','s')
please enter a number: 123
str = 123
>> str = input('please enter a number: ','s')
please enter a number: xx
str = xx
and then convert to numeric as required.

Sign in to comment.

 Accepted Answer

You have several options:
1. Continue using input as is, but just wrap it in a try, catch block.
isokinput = false;
while ~isokinput
try
userinput = input('enter some numbers');
isokinput = true; %this line only gets executed if input does not raise an error
catch
fprintf('Invalid expression. Please retry\n\n');
end
end
2. Take the input as string, check that the string is valid. For example to check that only digit were entered (using regexp):
isokinput = false;
while ~isokinput
userinput = input('enter some numbers', 's');
if isempty(regexp(userinput, '^\d+$')) %check that only digits have been entered
fprintf('Invalid expression. Please retry\n\n');
else
isokinput = true;
end
end
3. Again, take the input as string. Attempt to convert it to number and complain if it doesn't:
isokinput = false;
while ~isokinput
userinput = input('enter some numbers', 's');
usernumber = str2double(userinput); %will return nan if it can't convert the number
if isnan(usernumber)
fprintf('Invalid expression. Please retry\n\n');
else
isokinput = true;
end
end

1 Comment

Thank you so much! I have implented option three, it works perfectly:)

Sign in to comment.

More Answers (0)

Categories

Asked:

on 28 Jun 2016

Edited:

on 28 Jun 2016

Community Treasure Hunt

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

Start Hunting!