【问题标题】:Console pause in C++?C++ 中的控制台暂停?
【发布时间】:2011-05-19 15:07:35
【问题描述】:

在 C# 中,您可以使控制台等待输入字符(这对于能够在程序退出之前查看控制台的最后输出很有用)。作为 C++ 的初学者,我不确定等价物是什么。有吗?

【问题讨论】:

标签: c++ windows console


【解决方案1】:

最简单的方法就是:

std::cin.get();

您可以在此之前打印“按任意键继续...”之类的内容。有些人会告诉你

system("pause");

但不要使用它。它不便携。

【讨论】:

  • 请注意,虽然 cin.get() 应该读取单个字符,但您的终端可能会进行行缓冲,因此您必须在调用 get() 返回之前按 Enter。
  • 这两个样本的行为不一样,cin.get() 等待 ENTER,一旦用户按下 ANY 键,system("pause") 立即返回。
【解决方案2】:
#include <stdio.h>
// ...
getchar();

该函数等待单个按键并返回其(整数)值。

例如,我有一个功能与System("pause") 相同,但不需要“pause.exe”(顺便说一句,这是一个潜在的安全整体):

void pause()
{
  std::cout << std::endl << "Press any key to continue...";
  getchar();
}

【讨论】:

  • 没有pause.exe; pause 本身是 Windows shell 中的内置命令。
  • 嗯,我的印象是命令暂停导致运行一个基本上是程序“暂停”的整个进程。例如system("notepad")(在windows上)启动记事本,所以这个命令绝对可以启动其他可执行文件。
  • 不一样:getchar();在返回之前等待按下 ENTER 键
【解决方案3】:

标准中没有任何内容,也没有跨平台。通常的方法是等待 被按下,然后丢弃结果。

【讨论】:

  • C++ 标准库包含在 ANSI/C++ ISO 语言标准中,并包含类 istreamstd::cin。这是跨平台的,而不是“什么都没有”。
【解决方案4】:

不正确的解决方案是使用system("pause"),因为这会产生安全漏洞(目录中的恶意 pause.exe!)并且不是跨平台的(暂停仅存在于 Windows/DOS 上)。

有一个更简单的解决方案:

void myPause() {
    printf("Press any key to continue . . .");
    getchar();
}

这使用getchar(),它符合 POSIX(请参阅this)。 你可以像这样使用这个函数:

int main() {
    ...
    myPause();
}

这有效地防止控制台闪烁然后退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多