【问题标题】:using getch() to hold command prompt open Visual C++ 2010使用 getch() 保持命令提示符打开 Visual C++ 2010
【发布时间】:2011-11-22 01:57:15
【问题描述】:

我目前正在从一本名为“Ivor Hortons 开始 Visual c++ 2010”的书中学习 c++。

到目前为止,在我尝试过的所有示例中,我都不得不使用 getch() 来保持打开命令提示符,有时还会从 main 方法的末尾删除 return 0 语句。

这是 Windows 7 的变幻莫测,它会导致进一步的问题吗?目前这样做没有问题,但由于本书中没有包含它,我想知道它是否可能是我设置的错误。

非常感谢:)

【问题讨论】:

  • 哪里错了?此外,如果您按 CTRL+F5,当应用程序终止时,控制台会自动为您打开。
  • CTRL+F5 不会启动调试器。
  • 你最好使用 cin.get() 因为 getch() 不是标准函数,因此不可移植。
  • 从 Visual Studio 2010 开始(至少在我的机器上),CTRL-F5 不再显示在菜单中,因此人们可能不知道。

标签: c++ visual-studio-2010 visual-c++ console-application


【解决方案1】:

使用 _getch() 代替 getch()

【讨论】:

    【解决方案2】:

    getch() 不是特定于操作系统的,但它不是直接可移植的。在C++ 中执行此操作的首选方法是使用std::cin.get();

    main 函数可以隐式地return 0(您实际上不需要拥有该代码,请参见下文)。

    int main()
    {
       // valid, return 0 implied.
    }
    

    有关来自main 的隐式return 0 的更多详细信息,请参阅this question

    【讨论】:

    • getch() 甚至不是 Windows 功能;它是 MS-DOS 的遗留物。 (在 Windows 下:在 Unix 机器上,它是 curses 的一部分。)
    【解决方案3】:

    当一个程序结束时,由该程序创建的所有资源,包括终端窗口都将被释放。通过使用 getch 可以防止程序结束。这是正常行为,应该会继续以这种方式工作,直到 Windows 成为遥远的记忆。

    如果您从已经存在的命令窗口中启动程序,该窗口将不会关闭,因为它不是由程序创建的。

    【讨论】:

    • 控制台窗口不是是程序创建的资源;绝对没有理由仅仅因为程序结束而关闭它。
    • @James,如果没有现有的控制台窗口,则代表程序创建控制台窗口。我不知道是 Windows 做到了还是 C++ 运行时做到了,我不在乎 - 它仍然属于正在执行的程序。
    • 它是由 Visual Studios 创建的。如果您从控制台窗口调用应用程序,则不会创建它。它属于 Visual Studios(Visual Studios 确实应该采取措施让它保持开放)。
    • @James,我知道它不是 Visual Studio 创建控制台窗口,因为即使 Visual Studio 没有运行也会创建它。
    • 我知道创建控制台窗口的程序不是,因为我正常调用程序时没有创建它。
    【解决方案4】:

    首先,getch() 不是标准的 C 或 C++ 函数。即使在 Windows,我认为它的使用已被弃用;它的语义可以追溯到 CP/M 和早期的 MS-DOS。

    其次,它确实没有必要,至少对于控制台应用程序(和 我认为它不适用于非控制台应用程序)。如果你正在跑步 从控制台窗口运行程序,窗口保持打开状态。如果你是 从 Visual Studios 运行它,在 return 语句,它阻止程序,并保持窗口打开 (尽管 IDE 真的没有理由仅仅因为 您的程序已终止)。

    【讨论】:

    • 当你双击程序启动它时呢?这不符合您概述的任何一种情况。
    • @Mark Ransom 您无需双击启动控制台应用程序。一旦它们被开发出来,你就可以从控制台调用它们。或者来自批处理脚本,它希望以更优雅的方式处理事情。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多