Wait until user presses enter in C++?

前端 未结 3 1734
难免孤独
难免孤独 2020-12-21 17:50
waitForEnter() {
    char enter;

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

It works, but not always. It doesn\'t work w

相关标签:
3条回答
  • 2020-12-21 18:04

    On Windows, you can do this:

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

    I don't know the equivalent on Linux.

    0 讨论(0)
  • 2020-12-21 18:06

    You can use getline to make the program wait for any newline-terminated input:

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

    In general, you cannot simply "clear" the entire input buffer and ensure that this call will always block. If you know that there's previous input that you want to discard, you can add std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); above the getline to gobble up any left-over characters. However, if there was no extra input to begin with, this will cause an additional pause.

    If you want full control over the console and the keyboard, you may have to look at a platform-specific solution, for instance, a terminal library like ncurses.

    A select call on a Posix system that can tell you if reading from a file descriptor would block, so there you could write the function as follows:

    #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);
      }
    }
    
    0 讨论(0)
  • 2020-12-21 18:09

    (the first parameter) The name of the array of type char[] in which the characters read from cin are to be stored.

    (the second parameter) The maximum number of characters to be read. When the specified maximum has been read, input stops.

    (the third parameter) The character that is to stop the input process. You can specify any character here, and the first occurrence of that character will stop the input process.

    cin.getline( name , MAX, ‘\n’ );
    

    Page 175 IVOR HORTON’S BEGINNING VISUAL C++® 2010

    0 讨论(0)
提交回复
热议问题