[Ayuda][C] Leer solo un caracter.

Iniciado por GROV, 23 Octubre 2012, 07:54 AM

0 Miembros y 1 Visitante están viendo este tema.

GROV

Buenas noches a todos, bueno veran, generalizando estoy haciendo un programa para una clase en la escuela el cual tiene un menu con switch y do_while que, en los casos, utiliza caracteres. El problema que tengo es que cuando introduzco algo asi como:

aefs

el programa primero se va al caso 'a', doy un enter y se va al caso 'e', luego al caso 'f', despues como no tengo caso 's' entra al default, después de pasar por cada caso me regresa al menu, mi duda es que podria hacer para que al introducir de nuevo

aefs

solo me tome encuenta el primer caracter, entre a ese caso independientemente del que sea y vuelva al menu, osea que solo me tome el primer caracter y los demás me los ignore.

De antemano muchas gracias, y espero me puedan ayudar.

Saludos!
"Ningún problema debe de resolverse dos veces"

do-while

¡Buenas!

Si no pones el codigo, es dificil adivinar que es lo que estas haciendo mal...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

ankora45

Hola, puedes crear una cadena char menu[50]y pasarle a switch(menu[0])
asi lee solo el primer caracter asi si pones asdf siempre te lleva al defaul sin pasar por todas las letras
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro

0xDani

Cita de: ankora45 en 23 Octubre 2012, 12:13 PM
Hola, puedes crear una cadena char menu[50]y pasarle a switch(menu[0])
asi lee solo el primer caracter asi si pones asdf siempre te lleva al defaul sin pasar por todas las letras

Ocupar 50 bytes para solo utilizar uno... digamos que no es la mejor solucion.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

satu

Hola!!

Puedes hacer algo como esto:

char opcion;
......
opcion = getchar();
while(getchar() != '\n') ;
switch(opcion)
............


Creo que debería funcionar.

Saludos
Breakbeat como forma de vida

rir3760

Cita de: satu en 23 Octubre 2012, 18:58 PMPuedes hacer algo como esto:
char opcion;
......
opcion = getchar();
while(getchar() != '\n') ;
switch(opcion)
............


Creo que debería funcionar.
Funciona pero hay que cambiar el tipo de la variable "opcion" a "int" ya que ese es el tipo de retorno de la función "getchar".

Otra forma es mediante "scanf":
char ch;

/* ... */

scanf(" %c%*[^\n]%*c", &ch);

Ahí cadena de formato indica:
1) " " leer y descartar el espacio blanco al inicio de la linea.
2) "%c" leer un carácter y almacenarlo en la variable "ch".
3) "%*[^\n]" leer y descartar todo carácter distinto de '\n'.
4) "%*c" leer y descartar un carácter (el '\n').

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

GROV

Ok, muchas gracias a todos me han ayudado mucho, y si, se me ocurrio hacerlo como dijo @ankora45, pero si no es la forma más eficiente, y ambas formas me funcionaron
@satu y @rir3760, se los agradezco.

Saludos!!
"Ningún problema debe de resolverse dos veces"