• 0

[C++] Implement press any key to continue


Question

How to implement press any key to continue?

The following doesn't work, it requires me to press enter.

void pressAnyKeyToContinue()
{
	cin.sync();
	cout << endl << "Press any key to continue..." << endl;
	cin.get();
}

Neither does getchar(); instead on cin.get();

15 answers to this question

Recommended Posts

  • 0

What platform are you using?

Without implementing some kind of keyboard hook, I think it's only possible on Windows.:

A) system("pause") - which will make people rant about how "slow" and unreliable it is (but you don't give a **** since you just want to end the program)

B) use the _getch function, which is included in conio.h

  • 0

What platform are you using?

Without implementing some kind of keyboard hook, I think it's only possible on Windows:

A) system("pause") - which will make people rant about how "slow" it is (like you give a **** since you just want to end the program)

B) use the _getch function, which is included in conio.h

Getch(); would work great for you. Though "cin" should already be waiting...but I think your problem is that cin.get(); waits for a specific key (Default Enter)

  • 0

Keep your original code, just change the message to "Press ENTER to continue". Both system("pause") and _getch() are Windows-specific; don't introduce that dependency just for the sake of supporting any key (if you already have that dependency, nevermind). In any case, most users press space or enter when prompted for any key.

  • 0

Keep your original code, just change the message to "Press ENTER to continue". Both system("pause") and _getch() are Windows-specific; don't introduce that dependency just for the sake of supporting any key (if you already have that dependency, nevermind). In any case, most users press space or enter when prompted for any key.

Your argument is made ad infinitum on the web, but it simply doesn't address the OP's question. He wants the user to be able to press any key, not the enter key. And I clearly pointed out that those 2 functions were Windows-specific. But if that's the platform he's developing on, then like you mention, it's perfectly fine. If not, then what he's asking is probably not possible without implementing some low-level key-event hook, but I doubt that would be cross-platform so we'd gain nothing there anyway.
  • 0

It's worth considering both. If it's homework or something, it might be best to simply ask the user to press enter, because this can be done in a cross-platform manner.

If you really want the any key thing and this is for Windows, use boogerjones' option B. There is no good reason to call pause, even if the overhead doesn't really matter. _getch() does the same thing. Remember that you probably want to flush stdin before you call it, otherwise you can end up just reading a character that is already in the buffer instead of prompting for a new one.

If it's for another platform, you would have to find out what the equivalent terminal I/O stuff is there.

  • 0

I see.. Well this then is a pretty difficult problem to overcome. Although ultimately it doesn't really matter much that you have a "press any key to continue" sort of function.

Although.. could he perhaps do something like

int main()
{
char c;
//....code.....
//...more code...
cout << "Press any key to continue.\n";
cin >> c;
//..more code
cout << "I dont know why I have so many pauses here...\n";
cin >> c;
//...etc...
}

Something like this. Just create a character to be used in the "pause" mechanism that comes with getting input.

It's not flawless, but you could just disregard the character otherwise. It only takes up one byte, anyway.

It's still not perfect but hey, do what you can.

  • 0

I think this should work:

#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main()
{
char x = ' ';

printf("Press any key to continue...\n");
x = getch();

printf("The key you entered is: %c \n", x);

return 0;
}

int getch(void)
{
int ch;
struct termios oldt;
struct termios newt;
tcgetattr(STDIN_FILENO, &oldt); /*store old settings */
newt = oldt; /* copy old settings to new settings */
newt.c_lflag &= ~(ICANON | ECHO); /* make one change to old settings in new settings */
tcsetattr(STDIN_FILENO, TCSANOW, &newt); /*apply the new settings immediatly */
ch = getchar(); /* standard getchar call */
tcsetattr(STDIN_FILENO, TCSANOW, &oldt); /*reapply the old settings */
return ch; /*return received char */
}

I found it here: http://ubuntuforums.org/archive/index.php/t-225713.html

  • 0

Something like this. Just create a character to be used in the "pause" mechanism that comes with getting input.

It's not flawless, but you could just disregard the character otherwise. It only takes up one byte, anyway.

It's still not perfect but hey, do what you can.

No, it won't work. It will block at the first cin until you hit enter.

Rudy's code probably will work for the specific platform it's designed for (Linux?), as it's basically an implementation of the Windows _getch().

  • 0

No, it won't work. It will block at the first cin until you hit enter.

Rudy's code probably will work for the specific platform it's designed for (Linux?), as it's basically an implementation of the Windows _getch().

Unfortunately I don't have a c/c++ compiler on my Windows machine at work.... so I can't test it but yes I believe it was written for Linux (but I figured it might work on Windows or give him an idea where to start)

  • 0

Unfortunately I don't have a c/c++ compiler on my Windows machine at work.... so I can't test it but yes I believe it was written for Linux (but I figured it might work on Windows or give him an idea where to start)

It won't, because the Windows console is completely different. Still good to have though, since he didn't specify an OS.

The Windows implementation I described earlier would look like this (in C):

void pause(void)
{
	puts("Press any key to continue...");
	FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
	_getch();
}

If you wanted it to run on both Windows and Linux, you'd just have to add some #ifdefs.

  • 0
Your argument is made ad infinitum on the web, but it simply doesn't address the OP's question. He wants the user to be able to press any key, not the enter key.
No need to be so picky. I was not trying to contradict you, just propose an alternative - since you did not mention it, did you? ;). While "Press ENTER to continue" is technically not the same as "Press any key to continue", in many cases it achieves almost the same effect while avoiding a dependency on a non-standard C++ feature. Chances are the OP hadn't thought of it and might consider it a worthy solution. Of course your reply did address his point more directly, but since you already had done so, I saw no reason to repeat what you said.

That's all. :)

  • 0

The code needs to be portable, but I can work with the all your responses.

Right, then you have to just ask for enter. There is no portable way to ask for "any" key. It simply doesn't exist. I suppose you could use #ifdefs to add the platform-specific code for the platforms you support and have tested, and then fall back to asking for just enter on all other platforms.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • PDF-XChange Editor 11.0.1.0 by Razvan Serea PDF-XChange Editor is a comprehensive PDF editor that allows you to create, view, edit, annotate, and digitally sign PDF documents with ease. With advanced features like OCR, document security, and PDF optimization, PDF-XChange Editor is a powerful tool for both personal and professional use. Whether you need to edit text, images, or links, or add comments, stamps, or watermarks, PDF-XChange Editor provides all the necessary tools to make your PDFs look perfect. Additionally, it supports a wide range of file formats, including PDF, XPS, and DOCX, making it easy to convert and share your documents. PDF-XChange Editor key features: Edit text and images in PDF documents Add and remove pages from PDF files Annotate and markup PDFs with comments, highlights, and stamps Use OCR to convert scanned documents into searchable text Create and fill out PDF forms Sign and certify PDF documents digitally Add and edit hyperlinks within PDFs Extract text and images from PDF files Batch process multiple PDF files at once Customize the interface to your preferences Work with multiple documents in tabs Convert PDFs to other formats such as Word, Excel, and HTML Use advanced redaction tools to permanently remove sensitive information Add customizable headers and footers to PDFs Merge multiple PDF documents into a single file Split PDF documents into multiple files Add watermarks to PDF documents Use the measurement tools to calculate distances and areas in PDFs ....and much more PDF-XChange Editor 11.0.1.0 changelog: Fixed a crash in the new Open/Save dialog box when creating a new folder in an unavailable network path. (49552) Fixed a rare/infrequent crash on some dynamic XFA forms after changing their field values. [installer] Fixed an issue where shortcuts were lost during an upgrade from the previous version. [installer] Fixed an issue preventing migration of serial keys during updates from version 10. Fixed the issues with the shell context menu after installation of version 11. Fixed the issue with filtering comments. (49478) Fixed the issue that caused "Error [IO subsystem]: Invalid access mode." when converting PDFs to MS Office formats. Fixed an issue with the context menu position on some multi-monitor systems. (48467) Fixed an issue with handling complex custom file filters, displayed by JS, in the new Open/Save Files dialog box. (49486) Fixed several issues with the new 'Select Folder' dialog box. (49505) Fixed an issue with the new custom 'Open File' dialog box when using double-click to open it. (49498) Fixed an 'infinite' loop/proliferation in the 'Open Files' and 'Manage Places' dialog boxes. (49526) Fixed an issue with handling the mouse wheel inside the document "Find" box. (49539) Fixed an incorrect behaviour in the 'Go back (Alt+Left)' button in the new Open/Save Files dialog box. (49510) Fixed an issue with the shortcut keys (Alt+Left/Right) after navigating via breadcrumb paths in the new Open/Save Files dialog box. (49554) [installer] Fixed an issue with redrawing the progress text in the EXE installers. Fixed the issue where a mouse click outside of the polyline/polygon context menu during annotation creation would cancel the annotation. (49475) We switched back to using the system Open/Save/SelectFolder dialog box by default, instead of using the new one, because some popular features such as the QuickAccess/Recent items are missing in the new version. These will be added in a future release. Replaced the 'Extension' column in the new Open/Save File dialog box with a more user-friendly 'Type' column. Also fixed some issues when handling the 'Show file extension' option. (49497) Added the ability to authenticate local network shares in the new Open/Save Files dialog box. (49557) Improved the handling of dates after 01.01.2030 in XFA files - now such dates are stored properly when set via the dropdown widget. Flags NoZoom and NoRotate are now respected for only a limited subset of annotations. Download: PDF-XChange Editor (64-bit) | Portable ~300.0 MB (Shareware) Download: PDF-XChange Editor (32-bit) | Portable ~200.0 MB Download: PDF-XChange ARM64 | 276.0 MB Download: PDF-XChange Portable @PortableApps.com | 97.0 MB View: PDF-XChange Editor Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Still 3x what it should cost. So, it seems the trick is to increase price by 6x so that a reduction in price back to 4x looks like a steal. "You savvy shoppers win again!" I'm glad I'm not in a desperate spot to actually even need this overpriced crap. Hopefully, it comes back down by the time for when (or if) I ever do.
    • Although AI is great and has it's use cases they likely have massively overhyped it and it has not delivered as per their expectations. I fully expect them to start saying the same things again when it does get to a certain level of intelligence!
    • Microsoft wants to end printer driver headaches with Windows Ready Print by Usama Jawad A few days ago, Microsoft released Windows 11 Experimental build 26300.8553, bringing a ton of enhancements such as Start menu customization, search improvements, Taskbar polish, and other minor UI tweaks. Another relatively major enhancement snuck deep within the change log was related to upgrades to the Windows printing experience. Now, Microsoft has shared more details about these benefits. For starters, Microsoft has renamed its Modern Print Platform to Windows Ready Print. The company believes that this name highlights its shift in strategy, which now focuses on modernizing, securing, and streamlining the printing experience for Windows devices. Some of the upgrades present in Windows Ready Print have already been seeded to customers and partners. This includes ending support for third-party printer drivers via Windows Update and transitioning towards the Internet Printing Protocol (IPP) and the native Windows IPP printer driver. In line with these changes, new printer installations will default to Windows Ready Print on eligible devices starting from July 2026. However, Microsoft recognizes that not all environments will be able to migrate to this platform immediately, so it will allow users to choose between installing the printer via Windows Ready Print or the traditional OEM process. Users will be able to toggle this configuration through Settings > Bluetooth & Devices > Printers & Scanners > Printer preferences. This control applies only to new printer installations, and its functionality can also be modified via Group Policy as follows: Launch Group Policy Editor Navigate to Local Computer Policy -> Administrative Templates -> Printers Find and select 'Configure Windows Ready Print driver ranking' -> double click to open it Select 'Enabled' (if you wish to enable Windows Ready Print driver selection) or 'Disabled' (if you wish to explicitly disable Windows Ready Print driver selection). Select Apply Select OK Similarly, if you set up Windows protected print mode through the same setting in Windows 11, it will also default to using Windows Ready Print exclusively. Microsoft hopes that these improvements will help eradicate dependency on OEM-specific driver installation processes and simplify printer installations. We'll likely find out more about other tangible benefits in the coming months.
  • Recent Achievements

    • One Month Later
      johnjacobb40 earned a badge
      One Month Later
    • One Year In
      Primer1st earned a badge
      One Year In
    • Experienced
      JayZJay went up a rank
      Experienced
    • Reacting Well
      Sir_Timbit earned a badge
      Reacting Well
    • Week One Done
      rubentuben8 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      513
    2. 2
      PsYcHoKiLLa
      231
    3. 3
      +Edouard
      138
    4. 4
      ATLien_0
      87
    5. 5
      Steven P.
      81
  • Tell a friend

    Love Neowin? Tell a friend!