Programação de Software Básico
Faculdade de Informática

Função de Leitura de Teclado sem ENTER

Clique aqui para fazer o download do fonte.
// **************************************************
// Arquivo: mygetch.cpp
// Autor: Rafael Rieder
// Email: [email protected]
// Descrição:
// Exemplo de programa que lê um caractere do
// teclado e o processa, sem a necessidade de
// pressionar ENTER.
// Este programa foi testado com o compilador G++,
// tanto em ambiente Windows quanto em Linux.
// O código foi baseado na página:
// http://www.cprogramming.com/faq/cgi-bin/smartfaq.cgi?answer=1042856625&id=1043284385
// **************************************************

#include <iostream>
#ifdef WIN32
// compila para o Windows
#include <windows.h>
#include <io.h> // para glibc
#include <conio.h>
// compila para Linux
#include <sys/io.h> // para glibc
#include <termios.h>

using namespace std;

/* Function int mygetch()
This code sets the terminal into non-canonical mode, thus disabling line buffering,
reads a character from stdin and then restores the old terminal status. For more
info on what else you can do with termios, see "man termios".
There's also a "getch()" function in the curses library, but it is /not/ equivalent
to the DOS "getch()" and may only be used within real curses applications
(ie: it only works in curses "WINDOW"s)...

Source: http://www.cprogramming.com/faq/cgi-bin/smartfaq.cgi?answer=1042856625&id=1043284385

#ifndef WIN32
int mygetch()
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;

int main(void)
unsigned char ch;

cout <<
"Pressione * para sair..." << endl;
cout << endl;

cout <<
"Entre com um caractere qualquer: ";
#ifdef WIN32
ch = (unsigned char)getch();
ch = mygetch(); // para ambientes UNIX

cout << endl;
cout <<
"Você pressionou a tecla........: " << ch << endl;
while (ch != '*');

return 0;