while expression specification - problems with error messages

Hello,
is there any (simple) way to set up that an input can contain ONLY values from an interval (not necessarily of integers)?
Something such as:
abc=input('Choose a number from <-1000;999>: ')
while abc<1000||abc>999
abc=input('Wrong! Choose again a number from <-1000;999>: ')
works good, when I answer outside the interval. However, when I answer with a letter or with nothing typed at all - just clicking on enter button, I get these error messages:
??? Error using ==> input
Undefined function or variable '_that letter_'.
or
??? Error: Unexpected MATLAB expression.
for the letters. And:
??? Operands to the || and && operators must be convertible to logical scalar values.
Error in ==> blah at 12
while abc<-1000||abc>999
while no typing an answer at all. I want to make it idiotproof as much as possible.
I guess I am not even taking into account typing more inputs (probably nargin>1; error('... :'?). That could actually sort out the latter, too via nargin<1, right?

 채택된 답변

Walter Roberson
Walter Roberson 2012년 12월 31일
If you wish to be able to detect and smoothly handle letters in input, you need to use
abc_string = input('Choose a number from <-1000;999>: ', 's');
and then you have to figure out whether the string in abc_string looks like a number or not and then convert it to a numeric value.
Note: your current code has
while abc<1000||abc>999
but the beginning of your range is negative so you would want
while abc<-1000||abc>999

추가 답변 (1개)

Azzi Abdelmalek
Azzi Abdelmalek 2012년 12월 31일
편집: Azzi Abdelmalek 2012년 12월 31일
abc=input('Choose a number from <-1000;999>: ')
while abc<-1000 || abc>999
abc=input('Wrong! Choose again a number from <-1000;999>: ')
if isempty(abc) | ~isnumeric(abc)
abc=1000
end
end

댓글 수: 4

If you do not include the 's' option for input() then the input is eval()'d. If the user input happens to include a word and that word does not happen to be the name of a variable or function such as pi, then eval() is going to complain about the word being an undefined variable. This is not something you can detect after the fact: the eval() has alredy taken place. So you use the 's' option of input() to receive a string instead.
Azzi Abdelmalek
Azzi Abdelmalek 2012년 12월 31일
편집: Azzi Abdelmalek 2012년 12월 31일
There will be an error message, but the program will not skip the loop. Is there a way to avoid this error message?
You can use try/catch . But better is to use the 's' option of input() and look at whether you have a number-like-string before you convert the string to numeric.
Thank you, Azzi. I didn't know about isempty and isnumeric. (I thought it is possible to accept both answers)

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

카테고리

도움말 센터File Exchange에서 Characters and Strings에 대해 자세히 알아보기

질문:

2012년 12월 31일

Community Treasure Hunt

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

Start Hunting!

Translated by