while expression specification - problems with error messages

7 ビュー (過去 30 日間)
John
John 2012 年 12 月 31 日
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 件のコメント
Walter Roberson
Walter Roberson 2012 年 12 月 31 日
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.
John
John 2013 年 1 月 4 日
Thank you, Azzi. I didn't know about isempty and isnumeric. (I thought it is possible to accept both answers)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by