Al comparar dos char salta error.

Iniciado por Jucazuor, 12 Agosto 2017, 21:24 PM

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

Jucazuor

Hola a todos.

Hace poco comencé a estudiar C por lo que espero sepan disculpar si lo que voy a plantear es un error tonto. El asunto es que en una consigna de trabajo me pide crear un juego de memoria, de tipo buscar parejas iguales, en el que tengo que crear una tabla y el usuario debe ingresar dos coordenadas con el fin de encontrarlas.

Una de las instrucciones es que la tabla se disponga de la siguiente manera:


123456
A??????
B??????
C??????
D??????
E??????
F??????

Y por ende las coordenadas a ingresar deben ser del tipo A1, B5, F2, etc.

Por lo tanto tengo que descomponer cada coordenada para saber la fila y la columna de mi matriz (tabla) con la que trabajaré posteriormente. Por ahora tengo lo siguiente:

char caracteres[] = {'A','B','C','D','E','F'};
/*

Codigo

*/
void coordenadas(){
char coord1[2], coord2[2];

printf("\nIngrese coordenada 1 a mostrar: ");
scanf("%s", coord1);

printf("Ingrese coordenada 2 a mostrar: ");
scanf("%s", coord2);

for(int i = 0; i < 6; i++){
char a = coord1[0];
char b = caracteres[i];

if (strcmp(a, b) == 0){
//Codigo a ejecutar si la condicion se cumple
}
}
}


Pero el strcmp(a, b) == 0 me da error y me gustaría saber por qué. Siempre tengo problemas con las variables de tipo char :/

Gracias de antemano.

PD: Por las dudas si tengo la librería string.h

ivancea96

strcmp compara cadenas de caracteres, no caracteres. Los "char" asecas son tipos enteros. Son números de 1 byte. Puedes compararlos con ==, como lo harías con un int.

char a,b;
if(a == b){}

Jucazuor

Cita de: ivancea96 en 12 Agosto 2017, 22:13 PM
strcmp compara cadenas de caracteres, no caracteres. Los "char" asecas son tipos enteros. Son números de 1 byte. Puedes compararlos con ==, como lo harías con un int.

Gracias por la información, esa no me la sabía :)

Anteriormente tuve que comparar cadenas y al ver que no funcionaba con el tradicional == busque como hacerlo y vi que se utilizaba la función strcmp. Curiosamente en este tema pasó lo contrario. Había dado por hecho que era lo mismo para los caracteres.

Gracias nuevamente. El programa va sin problemas (por ahora jaja).


ivancea96

Ten en cuenta que lo único que hace strcmp es comparar 1 a 1 los caracteres de las cadenas que le das (algo tedioso de tenerlo que hacer a mano en cada lugar que se necesite)