elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Comparando cadenas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Comparando cadenas  (Leído 10,115 veces)
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #10 en: 24 Enero 2012, 01:09 am »

Incluso quitando el [20] del final, me da errores.

Ahora tengo este código:

Código
  1. char nombre[10][20], i, aux;
  2. system("pause");
Primero que todo, lee http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html. Te explica porque no utilizar ni gets() ni system("pause");
Por otro lado, i es un int por lo que debes declararlo como tal ademas de que aux lo estas declarando como "char" y no como "*char".
Por lo tanto debes declarar.
Código
  1. char nombre[10][20], *aux;
  2. int i;
Esos son los errores que yo he visto, no lo he analizado profundamente. Revisa el link que escribi antes, es de aqui mismo en el foro en los mensajes fijos.
Saludos


En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #11 en: 24 Enero 2012, 10:59 am »

Hola

Tienes 2 fallos:
Código
  1. char nombre[10][20], i, aux;
  2.  
  3. for (i=0;i<=10;i++)
  4.  

1- Tienes declarado aux como char, debes declararlo como: char aux[20];
2- En el for donde introduces los nombres te sobra el = en i<=10, debe ser i<10

Saludos


En línea

Breakbeat como forma de vida
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #12 en: 24 Enero 2012, 22:04 pm »

Hola

Tienes 2 fallos:
Código
  1. char nombre[10][20], i, aux;
  2.  
  3. for (i=0;i<=10;i++)
  4.  

1- Tienes declarado aux como char, debes declararlo como: char aux[20];
2- En el for donde introduces los nombres te sobra el = en i<=10, debe ser i<10

Saludos
Como yo dije anteriormente, el aux debe ser una matriz o un puntero, queda a gusto de el, y el = en i<=10 no sobra, ya que i puede ser igual o menor a 10. Ademas debe corregir lo del system("pause") que es bastante desaconsejable.

Saludos
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #13 en: 24 Enero 2012, 22:29 pm »

Como yo dije anteriormente, el aux debe ser una matriz o un puntero, queda a gusto de el, y el = en i<=10 no sobra, ya que i puede ser igual o menor a 10. Ademas debe corregir lo del system("pause") que es bastante desaconsejable.

Saludos

Si reemplazara char por un puntero a char asi alegremente sin asignarle ningun valor cometeria un error ya que se lo esta pasando a gets (mejor todavia usar fgets con stdin). Tambien tiene razon satu y ya lo habia corregido BlackZeroX (Astaroth) el otro punto, el ultimo elemento de un array es su tamaño menos uno.
« Última modificación: 24 Enero 2012, 22:32 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #14 en: 24 Enero 2012, 22:36 pm »

Muchas gracias a todos.

Ahora me compila, pero al introducir los 10 nombres, dice: 10nombre.exe dejó de funcionar. Windows está buscando una solución al problema...

Gracias.

Saludos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #15 en: 24 Enero 2012, 22:38 pm »

Muchas gracias a todos.

Ahora me compila, pero al introducir los 10 nombres, dice: 10nombre.exe dejó de funcionar. Windows está buscando una solución al problema...

Gracias.

Saludos.

Vaya uno a saber que frankestein de codigo tendras ahora, ponelo pero antes relee el hilo completo y asegurate de que estas leyendo SOLO 10 elementos en el array (ese es su tamaño, no podes leer mas sino pasa lo que viste).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #16 en: 24 Enero 2012, 23:38 pm »

El código es:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  
  7.    char nombre[10][20], aux[20];
  8. int i;
  9.    //aux es el nombre que comprobaremos si esta en la lista o no
  10.  
  11.    //damos un valor a 10 nombres --> ERROR
  12.  
  13.    for (i=0;i<10;i++){
  14.    printf("Introduce un nombre");
  15.    gets(nombre[i]);
  16.    }
  17.  
  18.  
  19.  
  20.    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
  21.    do{
  22.    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
  23.    gets(aux);
  24.    if((strcmp(nombre[0],aux)||
  25.    strcmp(nombre[1],aux)||
  26.    strcmp(nombre[2],aux)||
  27.    strcmp(nombre[3],aux)||
  28.    strcmp(nombre[4],aux)||
  29.    strcmp(nombre[5],aux)||
  30.    strcmp(nombre[6],aux)||
  31.    strcmp(nombre[7],aux)||
  32.    strcmp(nombre[8],aux)||
  33.    strcmp(nombre[9],aux))!=0) printf("El nombre se encuentra entre los anteriores\n");
  34.    else printf("El nombre no se encuentra entre los anteriores\n");
  35.  
  36.    }
  37.    while((strcmp(aux, "fin")!=0));
  38.  
  39.    system("pause");
  40.    return 0;
  41.  
  42. }
  43.  

Y ya no tengo ese problema. Ahora siempre dice que el nombre se ha encontrado entre los 10 primeros...

Gracias
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #17 en: 24 Enero 2012, 23:47 pm »

strcmp devuelve 0 cuando las cadenas comparadas son iguales.

¿Viste el codigo que te dejo BlackZeroX (Astaroth)? ¿No te parece un poco mas elegante la comparacion con un bucle?
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #18 en: 25 Enero 2012, 17:56 pm »

Ahora tengo esto:

Código
  1. /*Un programa que pida 10 nombres y los memorice. Después deberá pedir que se teclee
  2. un nombre y dirá si se encuentra o no entre los 10 que se han tecleado antes. Volverá
  3. a pedir otro nombre y a decir si se encuentra entre ellos, y así sucesivamente hasta que
  4. se teclee “fin”.*/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. int main(){
  11.  
  12.    char nombre[10][20], aux[20];
  13. int i;
  14.    //aux es el nombre que comprobaremos si esta en la lista o no
  15.  
  16.    //damos un valor a 10 nombres
  17.  
  18.    for (i=0;i<10;i++){
  19.    printf("Introduce un nombre");
  20.    gets(nombre[i]);
  21.    }
  22.  
  23.  
  24.  
  25.    //ERROR, todo lo que comparo sale como que se encuentra entre los anteriores
  26.    do{
  27.    printf("Introduce un nombre para comprobar si se encuentra entre los anteriores");
  28.    gets(aux);
  29.    for (i=0;i<10;i++){
  30.    if((strcmp(nombre[i],aux)==0)){
  31.                                    printf("El nombre se encuentra entre los anteriores\n");
  32.                                    break;
  33. }    
  34.    else printf("El nombre no se encuentra entre los anteriores\n");
  35.    break;
  36. }
  37.    }
  38.    while((strcmp(aux, "fin")!=0));
  39.  
  40.    system("pause");
  41.    return 0;
  42.  
  43. }
  44.  

Lo que he editado ha sido el bucle for del final, y ahora, introduzco diez nombres. Cuando pongo el que quiero comprobar:

- Si es el que he metido primero (el que equivale a nombre[0]), sale como que lo he introducido --> Correcto
- Todos los demás salen como que no los había introducido...

Gracias.

Saludos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Comparando cadenas
« Respuesta #19 en: 25 Enero 2012, 18:55 pm »

Lee el codigo con atencion, publicar 200 mensajes con un solo problema no implica que te lo vayamos a solucionar nosotros. El bucle ese no tiene sentido, si solo funciona con el primer elemento es por algo. Tal vez si usas una identacion como la gente lo veas rapidamente.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cadenas...
Programación Visual Basic
programatrix 3 2,070 Último mensaje 30 Diciembre 2005, 22:13 pm
por programatrix
Comparando resultados[c]
Programación C/C++
flacc 2 4,696 Último mensaje 10 Diciembre 2010, 02:55 am
por flacc
[Solucionado] Comparando 2 arrays
PHP
aaronduran2 2 2,129 Último mensaje 11 Febrero 2012, 08:09 am
por aaronduran2
registros alterados comparando 2 tablas
Bases de Datos
fallout20xx 1 1,855 Último mensaje 24 Septiembre 2012, 13:34 pm
por HdM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines