首页 > 解决方案 > 如何更改代码以使其在输入小于或等于零的数字时指示结束并阻止用户输入数据

问题描述

我需要在matlab中做一个数字排序器,它可以从用户输入中读取整数,直到输入一个等于或小于零的数字。一旦输入等于或小于零的数字,程序就会按升序对数字进行排序。我不知道从这里做什么:

sortorder = input('Enter the word "up" if you want to sort array in ascending order, \nor enter the word "down" if you want to sort the array in descending order: ', 's');
nvals = input('Enter number of values to sort: ');
switch sortorder
case {'up', 'Up'}
array = zeros(1,nvals);
for ii = 1:nvals
string = ['Enter value ' int2str(ii) ': '];
array(ii) = input(string);
end
sorted = ssort(array);
fprintf('\nSorted date:\n');
for ii = 1:nvals
fprintf(' %8.4f\n',sorted(ii));
end
case {'down', 'Down'}

标签: matlab

解决方案


可以将 break 语句添加到读取输入值的循环中。在跳出循环之前,可以截断数组以删除由于输入过早结束而未填充的额外值(假设输入了小于 0 的数字)。如果您不希望包含输入的终止号码,您可以通过将行更改为 来截断Array = Array(1,1:Value_Index)数组Array = Array(1,1:Value_Index-1)

Sorting_Pattern = input('Enter the word "up" if you want to sort array in ascending order, \nor enter the word "down" if you want to sort the array in descending order: ', 's');
Number_Of_Values = input('Enter number of values to sort: ');
Array = zeros(1,Number_Of_Values);


for Value_Index = 1: +1: Number_Of_Values

 
Input_Value = input(['Enter value ' int2str(Value_Index) ': '],'s'); 
Array(1,Value_Index) = str2num(Input_Value);


if(str2num(Input_Value) <= 0)
%Deleting unused indices in array%
Array = Array(1,1:Value_Index);

%Uncomment to force ascending order upon termination%
% Sorting_Pattern = 'up';

break;
end
    
end


switch Sorting_Pattern
    
    case {'up','Up'}
    Sorted_Array = sort(Array);
    
    case{'down','Down'}
    Sorted_Array = sort(Array,'descend');

end

Sorted_Array

推荐阅读