los arrays no se pueden comparar directamente.
Lo que tu estás haciendo a nivel de código es lo siguiente: comparas la dirección de memoria donde se encuentra "cadena" con la posición de memoria en la que el programa ha almacenado la cadena "hola", dado que dichas posiciones son diferentes el resultado es siempre false.
Para comparar cadenas de caracteres de c usa strcmp, por ejemplo.
Aunque ya que estás incluyendo clases de c++... cambia el char* por un string y entonces la comparación si funcionará porque, al poner
if ( cadena == "hola" )
implícitamente se va a crear un string que va a contener la cadena hola y, después, se van a comparar ambos strings.
Gracias! Usando el strcmp, salio perfecto.
Ahora, tengo una duda aparte, a ver si puedes explicarme el porqué.
Si tengo este código:
#include <stdio.h>
int main()
{
char letra1[]="AAAAA";
char letra2[]="BBBBB";
char letra3[]="CCCCC";
printf("A: %s\nB: %s\nC: %s\n\n",letra1
,letra2
,letra3
);
printf("Ingrese la letra D, 5 veces: ");
printf("\nA: %s\nB: %s\nC: %s\n\n",letra1
,letra2
,letra3
);
}
Corre bien, pero cuando Ingreso más de 5 veces la "D" .... el gets hace que la cadena letra1 se sobre-escriba. Lo mismo si uso scanf
Pero yo lo he solucionado haciendo esto:
Dándole 50 posiciones a cada cadena. Haciendo esto , ya no se sobre escribe letra1, ( a menos claro que el user ingrese más de 50 caracteres )
Pero, a lo que voy es ... es técnicamente correcto poner algo así? Osea, 50 espacios , el igual a un texto..
char letra1[50]="AAAAA";
char letra2[50]="BBBBB";
char letra3[50]="CCCCC";
#include <stdio.h>
int main()
{
char letra1[50]="AAAAA";
char letra2[50]="BBBBB";
char letra3[50]="CCCCC";
printf("A: %s\nB: %s\nC: %s\n\n",letra1
,letra2
,letra3
);
printf("Ingrese la letra D, 5 veces: ");
printf("\nA: %s\nB: %s\nC: %s\n\n",letra1
,letra2
,letra3
);
}
Gracias! Es que recién empiezo y esto fue algo que no me quedo claro.
Saludos!