Entering numbers from the keyboard
Show older comments
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
on 15 Jun 2013
What have you done so far? specify the problems you have encountered
Brian
on 15 Jun 2013
Edited: Azzi Abdelmalek
on 15 Jun 2013
Answers (2)
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
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
on 15 Jun 2013
Edited: Azzi Abdelmalek
on 15 Jun 2013
Image Analyst
on 15 Jun 2013
Why not just get all 4 numbers in one single call to inputdlg() like I showed you?
Azzi Abdelmalek
on 15 Jun 2013
Edited: Azzi Abdelmalek
on 15 Jun 2013
c = max(A);
Y = A(A ~= c);
b = max(Y);
is correct
you can also do
y=unique(sort(A))
c=y(end)
b=y(end-1)
I did'nt understand : make the programme run over and over again until a special input is entered
Brian
on 15 Jun 2013
Image Analyst
on 15 Jun 2013
All you have to do is put my code in a while loop. When you click Cancel it exits. See my answer - I edited it to add the while.
Azzi Abdelmalek
on 15 Jun 2013
ask='enter 4 values: press 1 to quit any other key to continue'
q=input(ask,'s');
while ~isequal(q,'1')
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
y=unique(sort(A));
c=y(end)
b=y(end-1)
q=input(ask,'s');
end
Image Analyst
on 4 Sep 2013
Please fix the formatting so we can copy and paste it.
Categories
Find more on Scripts 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!