read stdin的函数阻塞了另一个读取用户char输入的函数,是怎么回事?

时间:2012-05-13 16:33:05

标签: c++ windows console

这是读取STDIN所有行的功能:

string readStdin() {
  stringstream ss;
  string line;
  while (getline(cin, line)) {
    ss << line << endl;
  }
  return ss.str();
}

这是用于阅读用户角色:

TCHAR pressAnyKey( const TCHAR* prompt = "Press any key to continue..." ) {
  TCHAR ch;
  DWORD mode;
  DWORD  count;
  HANDLE hstdin(GetStdHandle( STD_INPUT_HANDLE ));
  // Prompt the user
  if (prompt != NULL) {
    WriteConsole(
      GetStdHandle( STD_OUTPUT_HANDLE ),
      prompt,
      lstrlen( prompt ),
      &count,
      NULL
    );
  }
  // Switch to raw mode
  GetConsoleMode( hstdin, &mode );
  SetConsoleMode( hstdin, 0 );
  // Wait for the user's response
  WaitForSingleObject( hstdin, INFINITE );
  // Read the (single) key pressed
  ReadConsole( hstdin, &ch, 1, &count, NULL );
  // Restore the console to its previous state
  SetConsoleMode( hstdin, mode );
  // Return the key code
  return ch;
}

在调用用于读取stdin的函数之后,用于读取用户密钥的代码产生了一种奇怪的编辑器状态,其中按下键不会导致返回到程序操作,而是在键入时在控制台上显示输入,并且没有办法返回计划。

0 个答案:

没有答案