Es común en los programas de consola hacer preguntas al usuario y éste responda, pero sólo una de las opciones válidas, si no, volver a preguntarle hasta que nos diga un valor correcto.
Aquí os enseño un ejemplo sencillo de todo esto (utilizaré la función mygetch):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <stdio.h> #include <termios.h> #include <unistd.h> #include <string.h> int mygetch(int echo) { struct termios oldt, newt; int ch; /* Obtenemos atributos del terminal */ tcgetattr( STDIN_FILENO, &oldt ); newt = oldt; /* Eliminamos el modo canónico: caracteres especiales */ newt.c_lflag &= ~ICANON; /* Eliminamos el echo a voluntad */ if (!echo) newt.c_lflag &= ~ECHO; /* Definimos los nuevos atributos al terminal */ tcsetattr( STDIN_FILENO, TCSANOW, &newt ); ch = getchar(); /* Ponemos los atributos como estaban al principio */ tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); return ch; } int get_option(char *texto, char *validas) { int tecla; char *ok; do { /* Mostramos texto en pantalla */ printf("%s: ", texto); /* Pedimos una tecla y la pasamos a mayúsculas, para no */ /* hacer demasiadas comprobaciones luego */ tecla=toupper(mygetch(1)); /* strpbrk nos dirá si tecla es una de las válidas */ ok=strpbrk((char*)&tecla, validas); /* strpbrk devuelve NULL si no ha encontrado tecla en validas */ if (ok==NULL) printf("\n¡Opción incorrecta! Por favor seleccione una de estas: %s\n", validas); } while (ok==NULL); return tecla; } int main() { int tecla; do { tecla=get_option("Desea continuar? [(S)i, (N)o, (M)e lo pienso]", "SNM"); switch (tecla) { case 'S': printf("\nHas elegido continuar...\n"); break; case 'N': printf("\nSalir\n"); break; case 'M': printf("\nTe doy 5 segundos para pensártelo\n"); sleep(5); break; } } while (tecla!='N'); return 0; } |
Como vemos, sólo tenemos que llamar a la función get_option, pasarle las opciones válidas, y la función sólo nos va a devolver una de las opciones que le digamos.
Pingback: Bitacoras.com /
It’s a game. Five dollars is free. Try it It’s not an easy game ->-> 토토사이트.COM