
		paulo1205
		
		(usa Ubuntu)
		
		Enviado em 01/04/2015 - 22:59h 
		Primeiro, uma correção histórica: a 
Curses é mais antiga que a 
ConIO, e bem mais completa do que ela.  Se alguém copiou alguém, a 
ConIO não tem o direito de ser chamada de original.
Quando a 
ConIO apareceu, lá pelo fim da década de 1980, ela foi pensada para entrada e saída no console dos PCs que executavam MS-DOS.  Ou seja: só havia um terminal (o console) e só um usuário.  Isso é muito mais simples do que o universo do UNIX em que se criou a 
Curses, que possuía vários usuários, em vários terminais simultâneos, e com cada terminal podendo ter propriedades e modo de funcionamento diferente dos demais.  Lembre-se, por exemplo, que ainda na mesma década de 1980, sistemas com UNIX possuíam vários usuários conectados por terminais seriais e, ao mesmo tempo, aceitavam conexões em terminais virtuais por rede e emuladores gráficos de terminal.
A função 
getch() da 
Curses, por si só, não é muito diferente da sua cópia na 
ConIO.  No entanto, enquanto a 
ConIO do MS-DOS pode ler direto o controlador do teclado do PC, a 
Curses tem de estar preparada para lidar com os diferentes tipos de terminal apresentados pelo UNIX.  Por isso, aplicações que usam 
Curses geralmente preparam o terminal para uso antes de fazerem chamadas a outras funções da biblioteca, e algumas dessas funções só funcionam se tal preparação anterior tiver sido feita.  É o caso de 
getch().
Você mencionou que é iniciante.  Uma coisa que eu vejo muito por aqui é gente iniciante que encontra código com 
getch() e que fica preocupada quando não consegue usar isso no Linux.  Na grande maioria das vezes, tudo o que o tal 
getch() faz no programa é dar uma pausa, principalmente porque alguns programas de DOS ou modo console do Windows têm sua janela fechada ao final da execução, antes que o usuário tenha tempo de ver o que apareceu como resultado.  Esse uso (e outro, pior ainda: o famigerado “
system("pause");”) não passam de gambiarras.  E eu considero simplesmente nocivo que se ensinem preguiça e vícios num curso de introdução à programação.
A função 
getchar() tem outra história.  Ela não foi feita tendo qualquer tipo de console ou terminal em mente, mas tão somente um fluxo (
stream) de dados, na forma de uma sequência de caracteres.  Que a entrada de dados padrão seja normalmente associada ao teclado do terminal (e as saídas padrão e de erro à tela) é mera conveniência, e não chega nem mesmo a ser uma regra.  Por questão de eficiência, os 
streams geralmente têm 
buffers de dados.  É possível desligar esses 
buffers de 
streams mas, no caso do mundo UNIX, o próprio 
kernel pode também ter -- e geralmente tem -- 
buffers associados ao terminal (não me meto a comentar sobre DOS e Windows porque desconheço esses detalhes nesses sistemas).
Parte do que as funções de preparação da 
Curses faz é justamente lidar com essas questões de 
buffers, tanto em nível de biblioteca de I/O quanto no de 
kernel.  Por isso mesmo, num programa em que você opte por usar 
Curses não deve mais usar as funções de entrada e saída do padrão do C, como 
printf(), 
getchar() ou 
scanf().  Isso, aliás, vale também para 
ConIO (ainda que os efeitos de não respeitar a restrição talvez não sejam tão perceptíveis quanto o são com 
Curses).
Se as consequências de usar 
Curses forem muito drásticas, você pode optar por um meio termo: implementar por conta própria as operações de baixo nível somente para a leitura, e poder continuar a imprimir com as funções tradicionais.  Veja, por exemplo, os seguintes tópicos deste fórum: <
http://www.vivaolinux.com.br/topico/C-C++/Como-ler-dados-do-teclado-sem-interromper-execucao-do-prog...> e <
http://www.vivaolinux.com.br/topico/C-C++/Duvida-com-realloc-em-C>.