等到用户按下Cinput?

waitForEnter() { char enter; do { cin.get(enter); } while ( enter != '\n' ); } 

它的工作,但并不总是。 在调用函数之前按下回车键时不起作用。

Solutions Collecting From Web of "等到用户按下Cinput?"

您可以使用getline使程序等待任何换行符终止的输入:

 #include <string> #include <iostream> #include <limits> void wait_once() { std::string s; std::getline(std::cin, s); } 

一般来说,您不能简单地“清除”整个输入缓冲区,并确保此调用将始终阻止。 如果你知道有以前的输入,你可以添加std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');getline之上吞噬任何剩余的字符。 但是,如果没有额外的输入,这会导致额外的暂停。

如果你想完全控制控制台和键盘,你可能需要查看一个平台特定的解决方案,例如像ncurses这样的终端库。

一个Posix系统上的select调用可以告诉你,如果从一个文件描述符读取将阻塞,所以你可以写如下函数:

 #include <sys/select.h> void wait_clearall() { fd_set p; FD_ZERO(&p); FD_SET(0, &p); timeval t; t.tv_sec = t.tv_usec = 0; int sr; while ((sr = select(1, &p, NULL, NULL, &t)) > 0) { char buf[1000]; read(0, buf, 1000); } } 

在Windows上,你可以这样做:

 void WaitForEnter() { // if enter is already pressed, wait for // it to be released while (GetAsyncKeyState(VK_RETURN) & 0x8000) {} // wait for enter to be pressed while (!(GetAsyncKeyState(VK_RETURN) & 0x8000)) {} } 

我不知道在Linux上的等效。

(第一个参数)存储从cin读取的字符的类型为char[]的数组的名称。

(第二个参数)要读取的最大字符数。 当指定的最大值被读取时,输入停止。

(第三个参数)停止输入过程的字符。 您可以在此处指定任何字符,并且该字符的第一个出现将会停止输入过程。

 cin.getline( name , MAX, '\n' ); 

Page 175 IVOR HORTON的开始VISUAL C ++ ®2010