Entering numbers from the keyboard

30 views (last 30 days)
Brian
Brian on 15 Jun 2013
I want to input 4 numbers from the keyboard, then have the m file give me the largest and second largest numbers.
How do I check that the input is a number (and not a letter/other character) and how do I get the second largest number to be shown?
Also the programme should run continuously, taking 4 numbers at a time until the user wants to terminate, eg with an 'N' , how do I do this?
Thanks in advance
  2 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 15 Jun 2013
What have you done so far? specify the problems you have encountered
Brian
Brian on 15 Jun 2013
Edited: Azzi Abdelmalek on 15 Jun 2013
xvalueone = 'enter a value for x';
xvalue = input(xvalueone);
a=xvalue
xvaluetwo = 'enter another value for x';
xvaluetwo = input(xvaluetwo);
b=xvaluetwo
xvaluethree = 'enter a third value for x';
xvaluethree = input(xvaluethree);
c=xvaluethree
xvaluefour = 'enter a 4th value for x';
xvaluefour = input(xvaluefour);
d=xvaluefour
A=[a,b,c,d]
C = max(A)
I don't know how to only allow input from numbers, how to keep the programme running until I terminate it or how to terminate it.
Thanks

Sign in to comment.

Answers (2)

Image Analyst
Image Analyst on 15 Jun 2013
Edited: Image Analyst on 15 Jun 2013
Start with this:
% Ask user for 4 numbers.
defaultValues = {'1', '2', '3', '4'};
titleBar = 'Enter values';
userPrompts = {'Enter number #1', 'Enter number #2', 'Enter number #3', 'Enter number #4'};
% Loop until user clicks Cancel
while true
caUserInput = inputdlg(userPrompts, titleBar, 1, defaultValues);
if isempty(caUserInput),break,end; % Bail out if they clicked Cancel.
[value1, value2, value3, value4] = caUserInput{:}
value1 = str2double(value1)
value2 = str2double(value2)
value3 = str2double(value3)
value4 = str2double(value4)
% Check for a valid number.
if isnan(value1)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
message = sprintf('value1 is not a number.\nI said it had to be an number.');
uiwait(warndlg(message));
end
if isnan(value2)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
message = sprintf('value2 is not a number.\nI said it had to be an number.');
uiwait(warndlg(message));
end
if isnan(value3)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
message = sprintf('value3 is not a number.\nI said it had to be an number.');
uiwait(warndlg(message));
end
if isnan(value4)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
message = sprintf('value4 is not a number.\nI said it had to be an number.');
uiwait(warndlg(message));
end
end

Azzi Abdelmalek
Azzi Abdelmalek on 15 Jun 2013
Edited: Azzi Abdelmalek on 15 Jun 2013
for k=1:4
xvalue='';
while ~isnumeric(xvalue)
test=0;
text=sprintf('enter a value n°%d for x',k);
str=input(text,'s');
id=regexp(str,'\d*\.?\d*','match')
if isempty(id)
id={' '};
test=1;
end
if numel(id{:})==numel(str) & test==0 & ~isequal(str,'.')
xvalue=str2num(str)
else
xvalue=''
end
end
A(k)=xvalue
end
c=max(A)
  8 Comments
Brian
Brian on 3 Sep 2013
Edited: Brian on 3 Sep 2013
The requirements are to also have the loop terminate when the letter "n" is inputted into any of the four boxes:
This is what I have now, mainly based on the original code from image analyst.
Tried to implement an if command for the termination by "n" but failed.
defaultValues = {'1', '2', '3', '4'};
titleBar = 'Enter values';
userPrompts = {'Enter number #1', 'Enter number #2', 'Enter number #3', 'Enter number #4'};
while true caUserInput = inputdlg(userPrompts, titleBar, 1, defaultValues); if isempty(caUserInput),break,end; [value1, value2, value3, value4] = caUserInput{:} value1 = str2double(value1) value2 = str2double(value2) value3 = str2double(value3) value4 = str2double(value4)
if isnan(value1) message = sprintf('value1 is not a number.\nI said it had to be an number.'); uiwait(warndlg(message)); end if isnan(value2) message = sprintf('value2 is not a number.\nI said it had to be an number.'); uiwait(warndlg(message)); end if isnan(value3) message = sprintf('value3 is not a number.\nI said it had to be an number.'); uiwait(warndlg(message)); end if isnan(value4) message = sprintf('value4 is not a number.\nI said it had to be an number.'); uiwait(warndlg(message)); end
end
a = [value1 value2 value3 value4] maxnumberis = max(a(:))
b=sort(a(:),'descend'); disp(b'); secondmaxnumber= b(2,1)
Image Analyst
Image Analyst on 4 Sep 2013
Please fix the formatting so we can copy and paste it.

Sign in to comment.

Categories

Find more on Modeling 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!