Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema de Lectura de Caracteres

Estas en el tema de Problema de Lectura de Caracteres en el foro de C/C++ en Foros del Web. Tengo un problema a la hora de leer caracteres introducidos por teclado. Si introduzco una cadena de caracteres no hay ningún problema, y lo lee ...
  #1 (permalink)  
Antiguo 12/11/2008, 14:15
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Problema de Lectura de Caracteres

Tengo un problema a la hora de leer caracteres introducidos por teclado.

Si introduzco una cadena de caracteres no hay ningún problema, y lo lee perfecto; pero si lo que quiero introducir es UN solo caracter y lo declaro como tal, y pido al programa que lo lea como tal (%c), se salta ese paso automaticamente, por lo que no consigo que funcione el programa...

Sin embargo, si lo declaro como un solo caracter pero lo leo como una cadena (%s), el programa funciona correctamente, me lee el caracter y ejecuta las ordenes correspondientes...dandome al finalizar la ejecucion del programa un error por estar usando una variable con capacidad para un solo caracter para leer una cadena (aunque esta solo tenga un caracter).

Os dejo el trozo de código:

Código:
	printf("\n\tTarifa: Ciudad (c), Aeropuerto (a), interprovincial (p): ");
	scanf("%c", &tar);
tar está declarado como char
utilizo el Visual C++ 2008 Express Edition, y el lenguaje es el C

gracias de antemano!
  #2 (permalink)  
Antiguo 12/11/2008, 19:35
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Problema de Lectura de Caracteres

Prueba utilizando el getch en lugar de scanf, de esta forma:

tar=getch();
  #3 (permalink)  
Antiguo 13/11/2008, 10:52
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema de Lectura de Caracteres

ya esta probado de antes...y tp funciona...
  #4 (permalink)  
Antiguo 13/11/2008, 12:00
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Problema de Lectura de Caracteres

Probablemente se te está colando un retorno de carro en el carácter.

Usa una doble lectura:

Código PHP:
  scanf("%c", &trash);
  
scanf("%c", &labuena); 
  #5 (permalink)  
Antiguo 13/11/2008, 14:43
Avatar de _Ju
_Ju
 
Fecha de Ingreso: noviembre-2008
Ubicación: Colima, MX
Mensajes: 192
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: Problema de Lectura de Caracteres

Intenta declarar una cadena y solo leer el primer caracter, algo aasi:

string vr;

scanf("%c",vr[0]);
  #6 (permalink)  
Antiguo 14/11/2008, 07:07
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema de Lectura de Caracteres

_Ju, tu solucion no m funciona...

Xinef, la tuya si...pero ¿no queda un poco "chapuza" tener que recoger el caracter 2 veces? ¿Habría alguna otra forma de que funcionara sin tener que declarar dos variables diferentes para almacenarlo?

Gracias!!
  #7 (permalink)  
Antiguo 14/11/2008, 10:20
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Problema de Lectura de Caracteres

Cita:
Iniciado por calathea Ver Mensaje
Xinef, la tuya si...pero ¿no queda un poco "chapuza" tener que recoger el caracter 2 veces?
:)

Sí, la verdad es que sí. Pero es una manera de limpiar el retorno de carro del buffer de entrada.

Si no te gusta tener dos scanf seguidos, siempre puedes encapsular la limpieza en una función.

Cita:
¿Habría alguna otra forma de que funcionara sin tener que declarar dos variables diferentes para almacenarlo?
Usar la misma variable... :P

Ahora en serio... si no te gusta el doble scanf ni la función, tendrás que programar tu propia función de entrada, como te comentaba _Ju.

Puedes usar gets (no es recomendable, puesto que no hace control de tamaño entrada) o lo que te comentaba _Ju: getchar.

Sólo tienes que hacerlo en un bucle e ir leyendo caracteres hasta que encuentres '\n'.




Y también puedes usar:

Código:
     scanf("%c[^\n]", &tar);
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:38.