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

1 view (last 30 days)
Charles Denis
Charles Denis on 22 Sep 2014
Commented: Guillaume on 22 Sep 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)"

Accepted Answer

Guillaume
Guillaume on 22 Sep 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 Comments
Guillaume
Guillaume on 22 Sep 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.

Sign in to comment.

More Answers (1)

A Jenkins
A Jenkins on 22 Sep 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