Visual Studio C ++空项目cout?

时间:2012-12-15 02:07:08

标签: c++ visual-studio cout

我是一个Java人(我知道有相当数量的C),他正试图进入C ++。

目前我正在使用VisualStudio 2012 Express并创建了一个空项目。以下......

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

严重的是不能轻易搞定。然而,我无法让这个该死的输出出现在我的生活中。

'Spark.exe' (Win32): Loaded 'C:\Users\Smith_000\Documents\Visual Studio 2012\Projects\Spark\Debug\Spark.exe'. Symbols loaded.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\apphelp.dll'. Cannot find or open the PDB file.
SHIMVIEW: ShimInfo(Complete)
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110d.dll'. Symbols loaded.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110d.dll'. Symbols loaded.
The program '[6260] Spark.exe' has exited with code 0 (0x0).

在阅读完之后,似乎创建一个空项目会禁用我曾经在大学里做过的简单C项目中的控制台。

那么,当调试模式处于活动状态时,将基本调试文本(如printf,cout和cerr)引入VS(首选)或控制台的一些致命简单方法是什么?

谢谢!

4 个答案:

答案 0 :(得分:3)

通过使用cout/cerr/clog

的自定义缓冲区路由OutputDebugStringA
#include <iostream>
#include <windows.h>

using namespace std;

// routes cout/cerr/clog to VC++ console and good old c stdout
class custom_outputbuffer : public std::streambuf {
public:
    custom_outputbuffer() 
    {
        setp(0, 0);

        // set std::cout to use my custom streambuf
        std::streambuf *backupOut = std::cout.rdbuf(this);
        std::streambuf *backupErr = std::cerr.rdbuf(this);
        std::streambuf *backupLog = std::clog.rdbuf(this);
    }

    ~custom_outputbuffer()
    {
        // make sure to restore the original so we don't get a crash on close!
        std::cout.rdbuf(backupOut);
        std::cerr.rdbuf(backupErr);
        std::clog.rdbuf(backupLog);
    }

    virtual int_type overflow(int_type c = traits_type::eof())
    {
        currentLine.push_back(c);
        int value = fputc(c, stdout);

        if (value == EOF || value == '\n')
        {
            OutputDebugStringA(currentLine.c_str());
            currentLine.clear();
        }

        return c;
    }

    std::string currentLine;
    std::streambuf *backupOut;
    std::streambuf *backupErr;
    std::streambuf *backupLog;
};


int main(int argc, char * argv[])
{   
    custom_outputbuffer ob;

    cout << "Hello Visual Studio Debug Output" << endl;

    return 0;
}

答案 1 :(得分:2)

这将打开一个带有文本的控制台窗口并快速解除它。您可以使用OutputDebugString将信息发送到Visual Studio中的“输出”窗口。例如,

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    OutputDebugString("Hello World\n");
    return 0;
}

答案 2 :(得分:1)

致命的简单方法:

光标在线上:

return 0;

F9设置断点。您应该会在左侧看到一个大红点。这将允许您在程序从main返回之前查看控制台输出。完成阅读控制台输出后,按F5继续执行。

答案 3 :(得分:0)

要在Windows IDE输出中查看文本,请使用OutputDebugString()

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx

否则它会进入控制台(如果你想要一个控制台,请参阅你的设置,但要知道它会在你的程序退出后立即关闭,以防止这样的使用getchar()暂停直到你按Enter键。 )

更好的是,就我而言,切换到Linux ......