MATLAB: Using inputdlg and isnan

inputdlgisnanstr2num

I need a user input using inputdlg, I need it to be a number and I need it to keep assking until I get a number. So far, it just gets stuck in a loop.
Please help, this should be easy!
nof=inputdlg('Enter number of floors:');
NOF=str2double(nof);
while isempty(NOF)||isnan(NOF)
disp('error')
nof=inputdlg('Enter number of floors:');
uiwait;
end

Best Answer

  • In your code, NOF never changes inside the loop. Therefore, if the loop enters, it won't ever exit because the exit condition will never be true. Make sure you are calling str2double within the loop:
    res=inputdlg('Enter number of floors:');
    nof=str2double(res);
    while isempty(res) || isnan(nof)
    % ^ user canceled ^ input was not numeric
    disp('error')
    res=inputdlg('Enter number of floors:');
    nof=str2double(res);
    end
    If you want to let the user use the command line:
    opts.WindowStyle = 'normal';
    res=inputdlg('Enter number of floors:', '', 1, {''}, opts);
    nof=str2double(res);
    while isempty(res) || isnan(nof)
    disp('error')
    res=inputdlg('Enter number of floors:', '', 1, {''}, opts);
    nof=str2double(res);
    end