Troubleshooting code for prompt and inputdlg

3 views (last 30 days)
The following code works fine for any user input for N:
N = input('Number of pieces to break into ');
rowgroups = diff( round(linspace(0,r,N+1)));
But when I try to use the following code, I get an error:
Undefined function 'plus' for input arguments of type 'cell'.
Error in sharebased_nshares (line 62) rowgroups = diff( round(linspace(0,r,N+1)));
prompt = {'Enter no. of shares:'};
dlg_title = 'Input';
num_lines = 1;
defaultans = {'2'};
answer = inputdlg(prompt,dlg_title,num_lines,defaultans);
N=answer;
rowgroups = diff( round(linspace(0,r,N+1)));
What is going wrong and where?

Accepted Answer

Star Strider
Star Strider on 10 Jun 2017
You need to convert ‘answer’ to a number:
N=str2double(answer);
That should work with your code.
  4 Comments
fiona rozario
fiona rozario on 10 Jun 2017
Thank you... I hadn't thought about this.

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 10 Jun 2017
N is a cell so use str2double(). See this robust snippet:
% Ask user for one integer number.
defaultValue = 2;
titleBar = 'Enter an integer value';
userPrompt = 'Enter the integer';
caUserInput = inputdlg(userPrompt, titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
% Round to nearest integer in case they entered a floating point number.
integerValue = round(str2double(cell2mat(caUserInput)));
% Check for a valid integer.
if isnan(integerValue)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
integerValue = defaultValue;
message = sprintf('I said it had to be an integer.\nTry replacing the user.\nI will use %d and continue.', integerValue);
uiwait(warndlg(message));
end

Community Treasure Hunt

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

Start Hunting!