Can I supress an 'ans' output without making a void function?

2 visualizaciones (últimos 30 días)
Charles Denis
Charles Denis el 22 de Sept. de 2014
Comentada: Guillaume el 22 de Sept. de 2014
function[ Hours Minutes Seconds Message ] = TimeConversion(TotalSeconds);
Hours = floor(TotalSeconds/3600);
Minutes = floor((TotalSeconds-(Hours*3600))/60);
Seconds = TotalSeconds-Hours*3600-Minutes*60;
Message = [num2str(TotalSeconds) ' Second(s) is equal to '... num2str(Hours) ' hour(s), ' ... num2str(Minutes) ' minute(s), and ' ... num2str(Seconds) ' second(s).'];
disp(Message);
end
When I Run this code:
>> TimeConversion(51624)
51624 Second(s) is equal to 14 hour(s), 20 minute(s), and 24 second(s).
ans =
14
Is there a way to suppress the ans?(which is obviously referencing 'Hours'), but keep the array in the function output for things such as: "[out1, out3] = TimeConversion(82000)"

Respuesta aceptada

Guillaume
Guillaume el 22 de Sept. de 2014
Yes, test to see if nargout is 0 and if it is don't assign anything to any of the outputs. You'll have to rejig your code to use temporary variables for hours, minute, seconds and message:
function [Hours, Minutes, Seconds, Message] = TimeConversion(TotalSeconds);
h = floor(TotalSeconds/3600);
m = floor((TotalSeconds-(Hours*3600))/60);
s = TotalSeconds-Hours*3600-Minutes*60;
msg = sprintf('%d Seconds is equal to %d hour(s), %d minute(s), and %d second(s).', TotalSeconds, h, m, s);
disp(msg);
if nargout > 0
Hours = h;
Minutes = m;
Seconds = s;
Message = msg;
end
end
  3 comentarios
José-Luis
José-Luis el 22 de Sept. de 2014
Not so sure about that. The "standard" way, if there is such a thing, would be to use a semi-colon. Here, you are just introducing unnecessary overheads, IMO.
Guillaume
Guillaume el 22 de Sept. de 2014
matlab does something similar in one of their function. Can't remember which one.
Personally, I would avoid changing the behaviour of the function based on the number of output, so I wouldn't use this construct.

Iniciar sesión para comentar.

Más respuestas (1)

A Jenkins
A Jenkins el 22 de Sept. de 2014
Use a semicolon.
TimeConversion(51624);
or
[out1, out3] = TimeConversion(82000);

Community Treasure Hunt

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

Start Hunting!

Translated by