entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

C Unix (GCC): cómo introducir un sólo carácter sin pulsar INTRO

Hola a todos. Estoy teniendo dificultades en el aprendizaje de C con el compilador en línea GCC, del Mac, y eso que ya he programado en C, y CPP, pero hace años, y era el Turbo C de Borland. !Lo que habrá llovido desde entonces! Bueno, pues mi problema es que quería recoger una entrada de teclado de un sólo carácter (ideal para un menú de consola a la antigua usanza), pero lo que encuentro son funciones como getchar(), que me obligan a pulsar INTRO, o getC(), que no la encuentra el compilador (no sé que cabecera tengo que poner). ¿Alguien puede ayudarme? Gracias anticipadas. También me iría bien disponer de algún listado de qué funciones soporta el GCC (o mi versión de GCC) y qué cabeceras hay que poner. Gracias.

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola @JaimeReus,

yo también tengo el C oxidado... leyendo por ahí, la biblioteca ncurses.h parece que permite leer un caracter sin presionar ENTER.

Yo buscando por ahí y recordando viejos tiempos, hice este ejemplo que lee de a 1 caracter sin presionar ENTER y que podrías integrar a tu ciclo de lectura para el menú "a la antigua usanza":

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

int mygetch();

int main()
{

char ch;

while((ch=mygetch())!='*')
    printf("\nPulsaste: %c\n", ch);
    return 0;
}

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;
}

Saludos cordiales!

2votos

JaimeReus comentado

Aún no lo he probado, pero de todas formas, gracias. Muchas gracias. De todas formas, lo que me preocupa ahora es, si para solucionar este problema ha sido preciso recurrir a ardides tan alambicados como el que me explicas, y eso sólo para una labor tan simple como leer un solo carácter, me pregunto cuantas veces vamos a encontrarnos con cosas similares con este lenguaje, o con este compilador. No alcanzo a comprender como los diseñadores del compilador no han implementado algo tan sencillo como leer un carácter sin tener que recurrir a trucos como el que me explicas. A lo mejor es que el CPP no es para mí. Yo sólo buscaba un lenguaje que me permitiera hacer aplicaciones sencillas. ¿Es que no existe eso? Existía. Recuerdo un tiempo, muy antiguo, por cierto, en que era posible, con el GW-Basic, por ejemplo, y con el Turbo Pascal, e incluso creo recordar que con el mismo C. ¿Es que están quitando cosas de los lenguajes en los compiladores modernos? Perdona este tostón, pero es que cuando veo las cosas que me pasan me da la sensación de que me estoy volviendo loco.
Muchas gracias en todo caso por tu respuesta. Voy a probar a ver si funciona. Gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta