Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/01/2015, 13:17
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Error en IF para validad sexo (M/F)

Lo primero, la comparación if ( X != 0 || X != 1 ) va a ser válida SIEMPRE, ya que X no puede ser 1 y 0 a la vez... ese "or" tiene que ser un "and".

Lo segundo, el %s del scanf indica que va a almacenar en lcsexo un string en vez de un char... que no es lo mismo. Entonces pueden pasar dos cosas:

* lcsexo es de tipo char*: dado que entonces lcsexo es un puntero, la comparación lcsexo != 'M' está comparando una dirección de memoria con el carácter 'M'... que obviamente no van a coincidir.

* lcsexo es de tipo char: entonces, dado que scanf esperaba recibir un puntero, el programa te está escribiendo lo introducido por el teclado en dios sabe donde y, por tanto, la comparación va a ser también errónea.

Yo imagino que te estará pasando lo primero, en ese caso tienes tres posibles opciones:

1. cambia la declaración de lcsexo para que sea, simplemente, char, después cambia el scanf por esto: scanf( "%c", &lcsexo ) y listo.

2. Dado que lcsexo es un puntero, tienes que usar lógica de punteros para hacer las comparaciones: if ( *lcsexo != 'M' && *lcsexo != 'F' )

3. Usa las funciones de la biblioteca estándar para comparar cadenas: if ( strcmp( lcsexo, "M" ) != 0 && strcmp( lcsexo, "F" ) != 0 )

Cualquiera de las tres opciones te resuelve el problema. Eso sí, tienes que tener en cuenta que únicamente van a funcionar con mayúsuculas y, además, la segunda opción tiene el problema de que si introduces más de un carácter puede tomar la solución como buena, por ejemplo "Mas", ya que empieza por 'M'.

Un saludo.