Entering numbers from the keyboard

30 次查看(过去 30 天)
Brian
Brian 2013-6-15
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 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-6-15
What have you done so far? specify the problems you have encountered
Brian
Brian 2013-6-15
编辑:Azzi Abdelmalek 2013-6-15
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

请先登录,再进行评论。

回答(2 个)

Image Analyst
Image Analyst 2013-6-15
编辑:Image Analyst 2013-6-15
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 2013-6-15
编辑:Azzi Abdelmalek 2013-6-15
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 个评论
Brian
Brian 2013-9-3
编辑:Brian 2013-9-3
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 2013-9-4
Please fix the formatting so we can copy and paste it.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Modeling 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by