Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: stevengvr en 26 Junio 2015, 16:36 pm



Título: ayuda por favor error
Publicado por: stevengvr en 26 Junio 2015, 16:36 pm
tengo que se supone hacer un programa que lea dos palabras y muestre por pantalla si son iguales no se por que me da error soy muy novato eso si


Citar
#include <stdlib.h>
#include <stdio.h>
 
int main()
 {
          char pal1[20], pal2[20];
          printf("escriba una palabra:");
          gets(pal1);
          printf("\n escriba otra palabra:");
          gets(pal2);
          
          if(pal1 = pal2)
          {
                     printf("\n las palabras son iguales");
                     }
                     else {
                          printf("\n las palabras no son iguales");
                          }
 system ("PAUSE");
 return 0;
}
         


Título: Re: ayuda por favor error
Publicado por: engel lex en 26 Junio 2015, 17:35 pm
hola!

los titulos de los temas deben ser descriptivos al problema

por otro lado, lo que haces tiene por lo minimo 2 errores...


primera aclaratoria: pal1 y pal2 son punteros a las direcciones de memoria donde están alojados sus 20 elementos

segundo if(pal1 = pal2) es un error ya que lo que haces es asignarle a pal1 el contenido de pal2, nunca fue comparado, para comparar debería ser
Código
  1. if(pal1==pal2)

y ccomo ya indiqué ellos son punteros a memoria, es decir, ellos contienen un numero donde está alojado eso, por lo tanto siempre será diferente, aquí vamos a el siguiente error


tercero, para comparar arreglos en c, existe la gran diferencia que no puedes intentar compararlos directamente, tienes varios metodos, el mas "rustico" sería comparar sus elementos directamente

Código
  1. int posicion;
  2. for(posicion = 0;posicion<20; posicion++){
  3.    if(pal1[posicion]!=pal1[posicion]){
  4.        break;
  5.    }
  6.  
  7. }
  8. if(posicion<20){
  9.    print("las palabras no son iguales");
  10. }else{
  11.    printf("las palabras son iguales")
  12. }
que hace este codigo?
en un ciclo (for) intenta recorrer los arreglos hasta el final (<20), sin embargo, si hay una diferencia ( != )en alguno de sus elementos el ciclo se rompe (break), luego revisamos hasta donde avanzó el ciclo, si avanzó hasta menos de donde debia, quiere decir que fue roto

otra solución más simple es usar la librería string.h y la función strcmp (string compare)

Código
  1. #include <string.h>
  2. // todo el codigo... hasta el gets
  3.  
  4. if( strcmp (pal1,pal2) == 0){
  5.    printf("las palabras son iguales");
  6. }else{
  7.    printf("las palabras no son iguales");
  8. }
  9.  
  10.  

espero te sirva

te recomiendo intentar leer tutoriales de progrmación en c antes de intentar crear algo, ya que C no es el más simple de los lenguajes, aunque es muy versatil y potente