C++ 等待用户在C++;?

C++ 等待用户在C++;?,c++,windows,linux,cin,enter,C++,Windows,Linux,Cin,Enter,它是有效的,但并不总是有效的。在调用函数之前按enter键时,它不起作用。您可以使用getline使程序等待任何换行终止的输入: waitForEnter() { char enter; do { cin.get(enter); } while ( enter != '\n' ); } 在Windows上,您可以执行以下操作: #include <sys/select.h> void wait_clearall() { fd_set

它是有效的,但并不总是有效的。在调用函数之前按enter键时,它不起作用。

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

waitForEnter() {
    char enter;

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

在Windows上,您可以执行以下操作:

#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);
  }
}
我不知道Linux上的等效项。

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

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

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

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)) {}
}

第175页Ivor HORTN的开始Visual C++®2010 < /P>你的平台是什么?无缓冲输入可能是特定于平台的。您无法轻松且便携地完成此操作-大多数其他答案在大多数情况下都有效使用标准输入,因为这是错误的。不要害怕使用特定于平台的键盘例程。我现在在Linux上工作,但它必须同时在Linux和Windows上工作。看看Windows。也许其他人可以提供适当的Linux功能。@Cubbi:是的。不知何故,无论你做什么,你都无法真正阻止有人在缓冲区中排队等候大量的换行。当我在iPhone上键入我的答案时,我已经想到你会比我先回答。不过,我也认为我们会得到同样的答案PAlso,我会使用

streamsize
而不是
size\u t
,尽管我认为它只是一个相同无符号整数的typedef。@Xeo:是的,我很懒。你的答案更整洁:-)不管怎样,
忽略所有字符,而不仅仅是
\n
?@Xeo:不,忽略所有字符也不好,因为它实际上会去读取所有这些字符——这不是最大值。我认为
readsome
是最好的选择!
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)) {}
}
cin.getline( name , MAX, ‘\n’ );