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

C error en una condicional

Estas en el tema de C error en una condicional en el foro de C/C++ en Foros del Web. Mi pregunta es porque esta condicional no funciona, se supone que recoje la cadena de caracteres y compara pero es como si nunca fueran iguales ...
  #1 (permalink)  
Antiguo 06/09/2009, 12:26
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Mensajes: 48
Antigüedad: 15 años, 4 meses
Puntos: 0
Exclamación C error en una condicional

Mi pregunta es porque esta condicional no funciona, se supone que recoje la cadena de caracteres y compara pero es como si nunca fueran iguales
Código PHP:
#include <stdio.h>
#include <conio.h>
main(){char var;
printf("Seleccione su sexo[Hm/Mj]:");
scanf("%s", &var);
if(var==
"Hm")
           {
           
printf("Es hombre");
           }
else if(var==
"Mj")
           {
           
printf("Es mujer");
           }
getch();

  #2 (permalink)  
Antiguo 06/09/2009, 13:02
 
Fecha de Ingreso: mayo-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Respuesta: C error en una condicional

Mirá esto:
strcmp: -- no puedo poner links -- ve a google y busca strcmp conclase y te saldra la explicación.

No puedes hacer lo siguiente:

if (variable == cadenadecaracteres)

tienes que usar alguna función como strcmp

saludos y espero que te sirva
  #3 (permalink)  
Antiguo 06/09/2009, 14:26
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: C error en una condicional

Cometes el error ya inicializando la variable.

Declaras un char en el que tu intención es guardar dos chars, deberías declarar un vector de dos chars, o bien una cadena de carácteres, o bien dos chars.

Y luego como bien dice Luciano9, los vectores (en este caso cadena de carácteres) no se pueden comparar con los operadores >, < o =, igual que no se pueden sumar ni concatenar así como así, hay que hacerlo índice a índice o bien utilizando las funciones declaradas en la librería string.h (que al fin y al cabo hacen lo mismo).

O bien:
Código:
#include <stdio.h>
#include <conio.h>

int main(){
	char var[2];
	printf("Seleccione su sexo[Hm/Mj]: ");
	scanf("%c", &var[0]);
	scanf("%c", &var[1]);
	if(var[0]=='H' && var[1]=='m')
		printf("Es hombre");
	else if(var[0]=='M' && var[1]=='j')
		printf("Es mujer");
	getch();
	return 0;
}
O bien:

Código:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main(){
	char var[2];
	printf("Seleccione su sexo[Hm/Mj]: ");
	scanf("%c", &var[0]);
	scanf("%c", &var[1]);
	if(strcmp("Hm", var)==0)
		printf("Es hombre");
	else if(strcmp("Mj", var)==0)
		printf("Es mujer");
	getch();
	return 0;
}
Te he cambiado también la entrada de datos, como son sólo dos carácteres no merce la pena un for para almacenar, y no lo hago en un solo scan o gets porque habría que controlar que al usuario le dé por meter más de 2 carácteres, de todos modos si quieres hacerlo así, tendrías que pasarle el puntero al primer elemento del vector al scanf, sería simplemente:
Código:
scanf("%s", var);

Última edición por JuanLVBR; 06/09/2009 a las 14:51 Razón: He puesto los códigos.
  #4 (permalink)  
Antiguo 06/09/2009, 17:47
(Desactivado)
 
Fecha de Ingreso: diciembre-2008
Mensajes: 48
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: C error en una condicional

Me acomodo asi:
Código PHP:
#include <stdio.h>
#include <string.h>

int main()
{  
printf("Escribe [H/M]:");
   
char s1;
   
int io;
   
scanf("%s", &s1);
   
strcmp"H", &s1 );
   
strcmp"M", &s1 );
   if( 
== )  printf"Es hombre" );
   else if( 
== )  printf"Mujer" );
   else  
printf"NADA" );
   
getch();
   return 
0;

GRACIAS CUATES.

Última edición por erickggp; 06/09/2009 a las 18:27
  #5 (permalink)  
Antiguo 06/09/2009, 19:52
 
Fecha de Ingreso: septiembre-2009
Ubicación: Burgos
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 1
Respuesta: C error en una condicional

Te dará algún warning pero me parece una buena elección sin duda el olvidarse de que sean dos carácteres (Hm, Mj), sin complicarse la vida, como debe ser.

Ahora como es un sólo carácter no hace falta usar strcmp, te ahorras incluir la librería, y alguna que otra variable y comparación, yo lo haría así:
Código c:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(){
  4.     char c;
  5.     printf("Escribe [H/M]: ");
  6.     scanf("%c", &c);
  7.     if(c=='H') printf("Es hombre");
  8.     else if(c=='M') printf("Mujer");
  9.         else printf("Nada");
  10.     return 0;
  11. }

Pero insisto, tu solución es totalmente válida y funciona estupendamente bien. Saludos.

Última edición por JuanLVBR; 06/09/2009 a las 20:06 Razón: Añadido código ejemplo.
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:27.