How to Validate User Input in MATLAB?

Click For Summary
SUMMARY

This discussion focuses on validating user input in MATLAB, specifically checking if the input variable, uiVal, meets certain criteria. The criteria include ensuring uiVal is numeric and real-valued, contains only integer values, falls within a specified range (1 to 6), and has a size of 1-by-4. The original code provided by the user returned incorrect error codes due to improper checks on dimensions and size, which were resolved by using the isequal function for size comparison.

PREREQUISITES
  • Understanding of MATLAB programming syntax and functions
  • Familiarity with data types in MATLAB, particularly numeric arrays
  • Knowledge of conditional statements and logical operations in MATLAB
  • Experience with MATLAB's error handling and debugging techniques
NEXT STEPS
  • Learn about MATLAB's isequal function for comparing array sizes
  • Explore MATLAB's error handling mechanisms to improve user feedback
  • Investigate MATLAB's data validation techniques for user inputs
  • Review best practices for writing clear and maintainable MATLAB code
USEFUL FOR

MATLAB developers, educators teaching programming concepts, and anyone involved in creating user-interactive MATLAB applications that require robust input validation.

gfd43tg
Gold Member
Messages
949
Reaction score
48

Homework Statement



Often times, a program accepts input from a user, and needs to check the validity of the input, and
then produce useful and informative error messages if the input is invalid. Suppose that uiVal is a
variable representing the user's input, and that errorCode is an 1-by-0 empty array. Write Matlab
code that appends to errorCode various identifying integers depending on certain conditions as
follows:

1, if uiVal is not a numeric, real-valued array
2, if uiVal is not all integer valued. Note that if uiVal is not numeric, real-valued (as is
checked in the rst item) then this condition should not be checked, since it may produce
an error.
3, if any values of uiVal are less than 1 or greater than 6. Note that if uiVal is not numeric,
real-valued (as is checked in the rst item) then this condition should not be checked, since
it may produce an error.
4, if uiVal is not 2-dimensional (use command ndims) or it's size is not equal to 1-by-4.

Homework Equations


The Attempt at a Solution


Right now my code is getting 4/7, I can't figure out what is wrong. Everything seems fine in the code, but when I run uiVal = @sign it gives errorCode = [1 1]

Code:
errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
    errorCode = [errorCode, 1];
else
    if (uiVal ~= round(uiVal))
       errorCode = [errorCode, 2];
    end 
    if (any(uiVal < 1) | any(uiVal > 6))
    errorCode = [errorCode, 3];
    end 
end
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    errorCode = [errorCode, 4];
    end

This is the autograder remarks:
Code:
Problem 3: 4/7
*the value of errorCode is incorrect for the variables: uiVal = '[1 2 3 4]'; 
The size of your variable is not as expected
*the value of errorCode is incorrect for the variables: uiVal = [1 2 3 4 5]; 
The size of your variable is not as expected
*the value of errorCode is incorrect for the variables: uiVal = @sign; 
The size of your variable is not as expected
 
Last edited:
Physics news on Phys.org
Im not sure what's causing your problem but you need to properly indent your code for clarity.

The if ndims... statement block should be outdented tight?

I ran it on Freemat and it seemed to work so here's the console printout. I didn't try all cases:

Code:
 FreeMat v4.0
 Copyright (c) 2002-2008 by Samit Basu
 Licensed under the GNU Public License (GPL)
 Type <help license> to find out more
      <helpwin> for online help
      <pathtool> to set or change your path
 Use <dbauto on/off> to control stop-on-error behavior
 Use ctrl-b to stop execution of a function/script
 Use <rootpath gui> to set/change where the FreeMat toolbox is installed
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
    errorCode = [errorCode, 1];
else
    if (uiVal ~= round(uiVal))
       errorCode = [errorCode, 2];
    end
    if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
    end
end
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    errorCode = [errorCode, 4];
-->     endError: Undefined function or variable uiVal
-->     end
Error: Undefined function or variable uiVal
--> uiVal=[1,2,3,4]
uiVal =
 1 2 3 4
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
    errorCode = [errorCode, 1];
else
    if (uiVal ~= round(uiVal))
       errorCode = [errorCode, 2];
    end
    if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
    end
end
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    errorCode = [errorCode, 4];
-->     end
--> print errorCode
--> errorCode
ans =
  Empty array 1 0
--> uiVal=[ 12.3, 14, 15.6 16]
uiVal =
 Columns 1 to 3
   12.3000   14.0000   15.6000
 Columns 4 to 4
   16.0000
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
    errorCode = [errorCode, 1];
else
    if (uiVal ~= round(uiVal))
       errorCode = [errorCode, 2];
    end
    if (any(uiVal < 1) | any(uiVal > 6))    errorCode = [errorCode, 3];
    end
end
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    errorCode = [errorCode, 4];
-->     end
--> errorCode
ans =
 2 3
--> uiVal=['a','b','c','d']
uiVal =
abcd
--> errorCode = zeros(1,0);
if ~(isnumeric(uiVal) && isreal(uiVal))
    errorCode = [errorCode, 1];
else
    if (uiVal ~= round(uiVal))
       errorCode = [errorCode, 2];
    end
    if (any(uiVal < 1) | any(uiVal > 6))
    errorCode = [errorCode, 3];
    end
end
    if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]
    errorCode = [errorCode, 4];
-->     end
--> errorCode
ans =
 1
 
The problem was this statement
Code:
if ndims(uiVal)~= 2 | size(uiVal) ~= [1,4]

it was changed to

Code:
if ndims(uiVal)~= 2 | isequal(size(uiVal), [1,4])
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
2K
Replies
2
Views
2K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 10 ·
Replies
10
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K