【发布时间】:2011-05-19 15:07:35
【问题描述】:
在 C# 中,您可以使控制台等待输入字符(这对于能够在程序退出之前查看控制台的最后输出很有用)。作为 C++ 的初学者,我不确定等价物是什么。有吗?
【问题讨论】:
-
如果这是 Windows,那么它是 @Christian 链接的副本的副本。投票结束。
在 C# 中,您可以使控制台等待输入字符(这对于能够在程序退出之前查看控制台的最后输出很有用)。作为 C++ 的初学者,我不确定等价物是什么。有吗?
【问题讨论】:
最简单的方法就是:
std::cin.get();
您可以在此之前打印“按任意键继续...”之类的内容。有些人会告诉你
system("pause");
但不要使用它。它不便携。
【讨论】:
cin.get() 应该读取单个字符,但您的终端可能会进行行缓冲,因此您必须在调用 get() 返回之前按 Enter。
#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上)启动记事本,所以这个命令绝对可以启动其他可执行文件。
标准中没有任何内容,也没有跨平台。通常的方法是等待
【讨论】:
istream 的 std::cin。这是跨平台的,而不是“什么都没有”。
不正确的解决方案是使用system("pause"),因为这会产生安全漏洞(目录中的恶意 pause.exe!)并且不是跨平台的(暂停仅存在于 Windows/DOS 上)。
有一个更简单的解决方案:
void myPause() {
printf("Press any key to continue . . .");
getchar();
}
这使用getchar(),它符合 POSIX(请参阅this)。
你可以像这样使用这个函数:
int main() {
...
myPause();
}
这有效地防止控制台闪烁然后退出。
【讨论】: