C++: No output from cout object
I am using Visual C++ 2008 Express Edition, and I am new to it. Just to test the water, I wrote a simple Windows Form application. I also use cout object to output some strings.
When I debugged it in IDE, I saw no string being outputted to the debug window of the IDE.
When I ran the application from command windows, I didn't see any outputs in the command windows as well.
So where the strings go? Any thought? Thank you!
The codes are very simple:
#include <iostream>
using namespace std;
void CTest::Dump (void)
{
cout << "\r\n Test the water!";
}
By default std::cout outputs to the standard output handle. However, an application running in the Windows subsystem doesn't have standard out hooked up to anything. You could create a console with AllocConsole() and then redirect standard out to that console window. Ex:
AllocConsole();freopen("conin$","r",stdin);freopen("conout$","w",stdout);freopen("conout$","w",stderr);
If you want to write stuff to the debug window of VS, you need to use the OutputDebugString function.
To expand on rozz' post: Most likely, your strings are caught in some stream buffer which is not being flushed at exit of your program.
Using std::flush flushes these buffers explicitly. Outputting std::endl flushes the buffers implicitly (and creates a linebreak).
Finally, note that "\r\n" is non-standard. If your streams are opened in text mode (which they should be), a single "\n" will do the job, though it is more idiomatic to use std::endl.
Using std::flush flushes these buffers explicitly. Outputting std::endl flushes the buffers implicitly (and creates a linebreak).
Finally, note that "\r\n" is non-standard. If your streams are opened in text mode (which they should be), a single "\n" will do the job, though it is more idiomatic to use std::endl.
Thank you fopr your help. Here aqre some updates.
1) Method 1 works.
AllocConsole();
freopen("conin$","r",stdin);
freopen("conout$","w",stdout);
freopen("conout$","w",stderr);
printf ("\r\n Test");
2) Method 2 passed the compilation, but still no output
OutputDebugString (_T("\r\nTest"));
1) Method 1 works.
AllocConsole();
freopen("conin$","r",stdin);
freopen("conout$","w",stdout);
freopen("conout$","w",stderr);
printf ("\r\n Test");
2) Method 2 passed the compilation, but still no output
OutputDebugString (_T("\r\nTest"));
Quote:Original post by Prefect
To expand on rozz' post: Most likely, your strings are caught in some stream buffer which is not being flushed at exit of your program.
Using std::flush flushes these buffers explicitly. Outputting std::endl flushes the buffers implicitly (and creates a linebreak).
Finally, note that "\r\n" is non-standard. If your streams are opened in text mode (which they should be), a single "\n" will do the job, though it is more idiomatic to use std::endl.
I tried both std::endl and std::flush, and one of them could make the outputs visible. Thanks anyway.
I wonder though, why would the program exit so abruptly that flushing is necessary. If it is for debugging, then you could use std::cerr which should flush each output automatically.
Is it, seeing that is doing more than is usually needed (flushing the stream) and is more to type?
Quote:
though it is more idiomatic to use std::endl
Is it, seeing that is doing more than is usually needed (flushing the stream) and is more to type?
You need a debugger attched if you want to see output from OutputDebugString - did you start the program in debug mode from the IDE?
Quote: Is it, seeing that is doing more than is usually needed (flushing the stream) and is more to type?
I would say more idiomatic yes, efficient no.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement