C++等待用户输入

Iva*_*ars 100 c++

在控制台应用程序中等待用户输入的最佳方法是什么?

std::cout << "press any key to exit...";
// wait for user to hit enter or another key
Run Code Online (Sandbox Code Playgroud)

her*_*tao 173

有几种方法,这里有一些可能的单行方法:

  1. 使用getch()(需要#include <conio.h>).

  2. 使用getchar()(预期Enter,需要#include <iostream>).

  3. 使用cin.get()(预期Enter,需要#include <iostream>).

  4. 使用system("pause")(需要#include <iostream>).

    PS:此方法也将Press any key to continue . . .在屏幕上打印.(似乎是你的完美选择:))


编辑:正如这里所讨论的,没有完全可移植的解决方案.comp.lang.c FAQ的问题19.1 涵盖了这个问题,包括Windows,类Unix系统甚至MS-DOS和VMS的解决方案.

  • `system("pause")`在linux/unix上不起作用,我会在答案中指明. (24认同)
  • @herohuyongtao不,它没有.请在Linux/Unix上编译一个应用程序调用系统("暂停"),然后自己查看.我不是在谈论system()(函数.但是使用"pause"作为命令. (4认同)
  • 在Microsoft VS2012中,使用包括#include <conio.h>和_getch(). (2认同)
  • 我强烈建议避免使用 getch(),因为它只适用于物理控制台,而不适用于标准输入,因此不适用于管道或文件重定向。 (2认同)
  • 对于linux,请使用unistd.h中的pause().pause命令仅存在于microsoft平台上,并且很少与pdp或dos相关.一些发行版将其声明为别名 (2认同)

CMS*_*CMS 10

do while循环是一种等待用户输入的好方法.像这样:

int main() 
{

 do 
 {
   cout << '\n' << "Press a key to continue...";
 } while (cin.get() != '\n');

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用该功能,system('PAUSE')但我认为这有点慢和平台相关

  • 系统('PAUSE')并非在所有系统上都可用... (3认同)

小智 6

你可以试试

#include <iostream>
#include <conio.h>

int main() {

    //some codes

    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • &lt;conio.h&gt; 是 Windows 主义。这可能就是为什么有些人在编译它时遇到困难的原因。不幸的是,Unix 解决方案相当丑陋。请参阅http://c-faq.com/osdep/cbreak.html。基本问题是 Unix 会缓冲输入,直到收到换行符为止,而 C 的 stdin 无法解决此问题。您需要进行系统调用来关闭缓冲。 (2认同)

Cas*_*Cow 6

没有“标准”库函数可以做到这一点。该标准(也许令人惊讶)实际上并不承认“键盘”的概念,尽管它确实有“控制台输入”的标准。

在不同的操作系统上有多种实现方法(参见 herohuyongtao 的解决方案),但它不能跨所有支持键盘输入的平台移植。

请记住,C++(和 C)被设计为可以在没有键盘的嵌入式系统上运行的语言。(话虽如此,嵌入式系统可能没有标准库支持的各种其他设备)。

这个问题已经争论了很长时间。