SWITCH expression must be a scalar or a character vector. issue

77 views (last 30 days)
Hi im trying to calculate price of 1,2,3 or more glass of milk. 1 glass of milk must be 1.75$ 2 is 3.0$ 3 is 3.5$ and for more glass 3.5$ + 0.5+ for every glass, but i am getting this error "SWITCH expression must be a scalar or a character vector". Any idea ? i check forum before but answer i get dont solve my problem thx for any help. Btw my proffesor only accept the homework if i use "inputdlg" "msgbox(sprintf(", and switch case stracture.
box=inputdlg('how many glass of milk');
switch box
case '1'
price=1.75;
case '2'
price=3;
case '3'
price=3.5;
otherwise
price=3.5+(0.5)*x;
end
msgbox(sprintf('you must pay %f',price));

Accepted Answer

Alex Mcaulley
Alex Mcaulley on 12 Mar 2019
inputdls is returning a cell, and also the variable x is not defined. Then you need to do something like this:
box=inputdlg('how many glass of milk');
switch box{1}
case '1'
price=1.75;
case '2'
price=3;
case '3'
price=3.5;
otherwise
price=3.5+(0.5)*str2double(box{1});
end
msgbox(sprintf('you must pay %f',price));
  1 Comment
Guillaume
Guillaume on 12 Mar 2019
If you want the code to be robust (remember that user input can be completely different from what you expected), I would do the conversion to double before the switch, then check it is indeed a number and scalar, so:
box = inputdlg('how many glass of milk');
box = str2double(box{1}); %will be nan if box{1} is not a number
assert(~isnan(box) && isscalar(box), 'Invalid input');
switch box
case 1 %no longer a char array
%...
end

Sign in to comment.

More Answers (0)

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!