Skip to content
Sign upLog in
Detecting keypresses in c++ without pressing enter
Profile icon

So, in all of the repl consoles, you need to press enter to input something. However, there are ways around this. This one is for c++.

First, we're going to need a few things, specifically iostream, stdio, and stdlib

#include <iostream> #include <stdio.h> #include <stdlib.h>

Next, we're going to make a function that'll return whatever key is pressed. I'll call it keypress for readability.

#include <iostream> #include <stdio.h> #include <stdlib.h> int keypress() { }

Now here's the confusing part. We're going to change how the console works. I myself don't fully understand it, but the basic premise is that we change how we input at the beginning of the function, and reset it at the end.

#include <iostream> #include <stdio.h> #include <stdlib.h> int keypress() { system ("/bin/stty raw"); //code will go here system ("/bin/stty cooked"); }

Now, we'll create a variable (c) to store the ASCII value of the key pressed, and give it a value by taking input with getc from stdin, then return the value.

#include <iostream> #include <stdio.h> #include <stdlib.h> int keypress() { system ("/bin/stty raw"); int c; c = getc(stdin); system ("/bin/stty cooked"); return c; }

Finally, we'll make sure the key that is pressed isn't visible to the user by disabling and reenabling echo.

#include <iostream> #include <stdio.h> #include <stdlib.h> int keypress() { system ("/bin/stty raw"); int c; system ("/bin/stty -echo") c = getc(stdin); system ("/bin/stty echo") system ("/bin/stty cooked"); return c; }

And that's it!

Below is a repl that demonstrates this. Try it out by pressing a key, and the console will display the ASCII value of the key.

You are viewing a single comment. View All
Profile icon

I think back ticks ` should replace the apostraphes ' for the code to show up

Profile icon

yeah just fixed that, my bad