Help in debugging this simple code snippet.

Newbie Member
11Aug2008,04:06   #1
rj81inmit's Avatar
Why does it always throw stderr ? Kindly help...

#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}


thanks, robin.
Mentor
11Aug2008,04:18   #2
xpi0t0s's Avatar
What do you mean by "throw stderr"? What is the output from your program, and what are you expecting it to do?

I changed it slightly (while(1) -> for (int i=0; i<5; i++)), built and ran it in Visual Studio 2005 (without the sleep() call either cos I couldn't find where this was displayed) and the output was:
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err

- as you see, displaying both hello-out and hello-err.

If you change it from while(1) to a short loop, what is the output then?
Newbie Member
11Aug2008,04:45   #3
rj81inmit's Avatar
Thats fine if you test with a finite for loop. but why is it first printing set of hello-err ? should it not print hello-out and then hello-err?
#include <stdio.h>
#include <unistd.h>
int main()
{
for(int i=0;i<5;i++)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
// sleep(1);
}
return 0;
}

output: hello-errhello-errhello-errhello-errhello-errhello-outhello-outhello-outhello-outhello-out
expected (??) : hello-out hello-err hello-out hello-err hello-out hello-err hello-out hello-err hello-out hello-err
Just wanted to understand how the streams are interpreted by the compilers.
Skilled contributor
11Aug2008,10:53   #4
faizulhaque's Avatar
This is Not Correct Section for That Go to C/C++ Section for making this.
Go4Expert Founder
11Aug2008,12:53   #5
shabbir's Avatar
Moved to C-C++ forum.
Mentor
11Aug2008,14:31   #6
xpi0t0s's Avatar
It probably depends on how streams work on your platform. What are you using? (If you're not sure show me the output of uname -a)
Try adding fflush(stream-name); after each printf and see what happens, i.e.:
fprintf(stdout,"hello-out\n"); fflush(stdout);
fprintf(stderr,"hello-err\n"); fflush(stderr);
Output is often buffered rather than printed immediately so this could be the cause of the behaviour.