C++ 等待用户在C++;?
它是有效的,但并不总是有效的。在调用函数之前按enter键时,它不起作用。您可以使用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
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’ );