我的程序没有在屏幕上显示字符

时间:2017-04-06 16:35:46

标签: c++ c visual-studio-2017

我尝试了几件事,但没有一件能奏效。有人知道问题是什么吗?这是我的代码:

#include <iostream>
#include <Windows.h>
#include <iomanip>
#include <fstream>
#include <stdio.h>

using namespace std;


int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int CmdShow) {


    cout << "Hello World" << endl;


   return 0;
}

由于

3 个答案:

答案 0 :(得分:0)

如果您正在使用visual studio,并创建一个Win32应用程序,它将不会创建一个控制台,因此输出不会出现在任何窗口上。如果您创建Win32控制台应用程序,std :: cout将被定向到控制台窗口,但您需要使用标准的main()程序入口点。

为避免创建新项目,请修改代码,如下所示:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int CmdShow) {
  AllocConsole();
  AttachConsole(GetCurrentProcessId());
  freopen("CONOUT$", "w", stdout);
  cout << "Hello World" << endl;
  return 0;
}

答案 1 :(得分:0)

在Windows上,有两种主要类型的程序:

  1. 单个文本输入和输出的控制台应用程序。这些通常在命令提示符中从命令行启动。

  2. 使用窗口,按钮,鼠标,触摸等的GUI应用程序。这些通常是从开始菜单中选择或双击图标开始的。

  3. (有一些方法可以让单个应用程序双向工作,但这几乎肯定不是你所追求的。)

    您的代码显示出试图成为两者的迹象。它有wWinMain,表明它是一个GUI应用程序,但它使用std::cout进行常规文本输出,这表明它是一个控制台应用程序。

    我认为您需要一个控制台应用程序,但是您在Visual Studio新建项目向导中选择Win32应用程序时意外启动了。要解决此问题而不重新开始:

    首先,删除不必要的包含,特别是删除#include <windows.h>

    下一步将wWinMain更改为标准C ++主函数,如下所示:

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

    最后,在解决方案资源管理器中右键单击您的项目,然后从弹出菜单中选择属性。在弹出式对话框的顶部,将配置设置为所有配置。在左侧,展开链接器并选择系统,然后在右侧将子系统字段更改为控制台(/子系统:CONSOLE)即可。点击确定

    现在你应该能够重建你的程序,它会起作用。

    警告:如果直接从Visual Studio运行它,将出现一个新的控制台窗口,眨眼之间,您的程序将完成,新的控制台窗口将消失,这使得很难分辨如果你做对了。

    如果从CMD提示符启动程序,则不会出现此问题。如果要从调试器运行,请在main函数的return语句中放置一个断点。这将在调试器结束之前暂停调试器中的程序,并且您将能够看到控制台窗口中的内容。有些人让程序在完成之前就要求输入键盘,这样可以让用户在控制台窗口消失之前看一下它是什么。

答案 2 :(得分:0)

您似乎已经创建了一个Windows应用程序而不是控制台应用程序。

控制台应用程序具有带签名的主要功能:

int main(int argc, char ** argv);

Windows应用程序具有签名的主要功能:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int CmdShow);

后者适用于实际创建窗口的应用程序。您在创建新项目时选择使用Visual Studio中的向导创建(假设您使用的是Visual Studio)。

使用: https://msdn.microsoft.com/en-us/library/ms235629.aspx

此外,您可能会在看到输出之前退出应用程序。 在这种情况下,我们可以使用非标准平台特定的调用:: system(“pause”)让它等到你按下一个键继续。

#include <iostream>
#include <iomanip>
#include <fstream>

#include <windows.h>

using namespace std;


int main(int argc, char ** argv)
{
    cout << "Hello World" << endl;
    system("pause");
    return 0;
}

另外,在它返回0的行上放置一个断点;并使用F5进行调试。