我编写代码来获取输入(整数),将输入解释为年份,然后返回世纪。除了cent = centuries ([ 1 2])
之类的输入外,代码工作正常。在这种情况下,它应该返回空字符串,但它返回第一世纪。我已经使用了~isinteger
和~isscalar
以及y<1
等,但它仍然会返回一个值。拜托,我能在这做什么?
{
function cent = centuries (y)
if margin >1
cent = [];
return
if y >0 && y<= 100
cent = 'I';
elseif y> 100 && y <= 200
cent = 'II';
elseif y> 200 && y <= 300
cent = 'III' ;
elseif y> 300 && y <= 400
cent = 'IV' ;
elseif y> 400 && y <= 500
cent = 'V' ;
elseif y> 500 && y <= 600
cent = 'VI' ;
elseif y> 600 && y <= 700
cent ='VII';
elseif y> 700 && y <= 800
cent = 'VIII' ;
elseif y> 800 && y <= 900
cent ='IX' ;
elseif y> 900 && y <= 1000
cent ='X' ;
elseif y> 1000 && y <= 1100
cent ='XI' ;
elseif y> 1100 && y <= 1200
cent = 'XII';
elseif y> 1200 && y <= 1300
cent ='XIII' ;
elseif y> 1300 && y <= 1400
cent ='XIV' ;
elseif y> 1400 && y <= 1500
cent ='XV';
elseif y> 1500 && y <= 1600
cent ='XVI' ;
elseif y> 1600 && y <= 1700
cent ='XVII' ;
elseif y> 1700 && y <= 1800
cent ='XVIII' ;
elseif y> 1800 && y <= 1900
cent ='XIX';
elseif y> 1900 && y <= 2000
cent ='XX' ;
elseif y> 2000 && y <= 2100
cent ='XXI' ;
elseif y> 2100 && y <= 2200
cent ='XXII' ;
elseif y> 2200 && y <= 2300
cent ='XXIII' ;
elseif y> 2300 && y <= 2400
cent ='XXIV' ;
elseif y> 2400 && y <= 2500
cent ='XXV' ;
elseif y> 2500 && y <= 2600
cent ='XXVI' ;
elseif y> 2600 && y <= 2700
cent ='XXVII' ;
elseif y> 2700 && y <= 2800
cent ='XXVIII' ;
elseif y> 2800 && y <= 2900
cent ='XXIX' ;
elseif y> 2900 && y <= 3000
cent ='XXX';
else cent =''.';
end
}
请查找附上我写的问题和代码,我已经使用了你的建议,但它没有重新输出一个非整数的输出 谢谢
答案 0 :(得分:0)
如果要进行严格检查,可以使用nargin
(输入参数的数量)来检查输入的数量以及类型检查:
function c = century(yr)
if nargin == 1 && isscalar(yr) && ceil(yr) == yr && yr > 0
% compute and return century value
else
c = [] % Or whatever the fail return value should be
end
end
请注意,我已使用ceil(yr) == yr
检查整数值,即使它存储在double中,因为issinteger
只接受参数,如果它是int类型及其相关类型。 [参考:isinteger
]。您可以根据要求进行更改。
function cent = centuries (y)
if nargin == 1 && isscalar(y) && ceil(y) == y && y > 0
if y >0 && y<= 100
cent = 'I';
elseif y> 100 && y <= 200
cent = 'II';
elseif y> 200 && y <= 300
cent = 'III' ;
elseif y> 300 && y <= 400
cent = 'IV' ;
elseif y> 400 && y <= 500
cent = 'V' ;
elseif y> 500 && y <= 600
cent = 'VI' ;
elseif y> 600 && y <= 700
cent ='VII';
elseif y> 700 && y <= 800
cent = 'VIII' ;
elseif y> 800 && y <= 900
cent ='IX' ;
elseif y> 900 && y <= 1000
cent ='X' ;
elseif y> 1000 && y <= 1100
cent ='XI' ;
elseif y> 1100 && y <= 1200
cent = 'XII';
elseif y> 1200 && y <= 1300
cent ='XIII' ;
elseif y> 1300 && y <= 1400
cent ='XIV' ;
elseif y> 1400 && y <= 1500
cent ='XV';
elseif y> 1500 && y <= 1600
cent ='XVI' ;
elseif y> 1600 && y <= 1700
cent ='XVII' ;
elseif y> 1700 && y <= 1800
cent ='XVIII' ;
elseif y> 1800 && y <= 1900
cent ='XIX';
elseif y> 1900 && y <= 2000
cent ='XX' ;
elseif y> 2000 && y <= 2100
cent ='XXI' ;
elseif y> 2100 && y <= 2200
cent ='XXII' ;
elseif y> 2200 && y <= 2300
cent ='XXIII' ;
elseif y> 2300 && y <= 2400
cent ='XXIV' ;
elseif y> 2400 && y <= 2500
cent ='XXV' ;
elseif y> 2500 && y <= 2600
cent ='XXVI' ;
elseif y> 2600 && y <= 2700
cent ='XXVII' ;
elseif y> 2700 && y <= 2800
cent ='XXVIII' ;
elseif y> 2800 && y <= 2900
cent ='XXIX' ;
elseif y> 2900 && y <= 3000
cent ='XXX';
else cent =''.';
end
else
cent = ''; % Or whatever the fail return value should be
end
答案 1 :(得分:0)
您只需要同时使用isinteger( input )
和isscalar( input )
。检查输入是否为正也很好。
注意:如果你对可能是double类型的整数感兴趣,比如1.0,那么你可以使用:
mod( input, 1 ) == 0
。