Detecting keypresses in c++ without pressing enter
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.
Nice! If you want you can also turn off echo using /bin/stty -echo just so they don’t have to clear the entire console each time.
I think back ticks ` should replace the apostraphes ' for the code to show up
how do you do this in c#?
You´re my hero!
Hey do you have any advice on how I can use this code to make a d- pad. So like when I press wsad instead it prints out a space to the right, left, down, or up instead of an integer?
you can get the actual char key press by casting it like so:
int key = keypress();
std::cout << (char)key << std::endl;