• Jueves 18 de Abril de 2024, 16:52

Autor Tema:  Primeros pasos con estructuras  (Leído 1140 veces)

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Primeros pasos con estructuras
« en: Martes 21 de Abril de 2009, 06:20 »
0
Hola gente del foro, estoy empezando a utilizar estructuras y estoy teniendo un problema que seguramente debe ser algo sencillo, se ma hace que algun problema de buffer o algo asi.
el programa es el siguiente:

Código: C
  1.  
  2. # include <stdio.h>
  3.  
  4.  
  5. struct equi
  6. {      
  7.        char nombre;
  8.        int ganados;
  9.        int perdidos;
  10.        int empatados;
  11.        int puntos;
  12. };
  13.  
  14.  
  15.  
  16. main()
  17. {
  18.  
  19.  struct equi equipos[2];
  20.  int i;
  21.  for (i=0;i<2;++i)
  22.  {
  23.  printf ("Ingrese nombren");
  24.  scanf ("%s",&equipos[i].nombre);
  25.  
  26.  printf ("Ingrese Partidos ganados,perdidos y empatadosn");
  27.  scanf ("%d %d %d",&equipos[i].ganados,&equipos[i].perdidos,&equipos[i].empatados);
  28. }
  29.  
  30. for (i=0;i<3;++i)
  31.  {
  32.  
  33.  printf ("Nombre: %s",equipos[i].nombre);
  34.  
  35.  printf ("Ganados: %d Perdidos: %d Empatados: %d",equipos[i].ganados,equipos[i].perdidos,equipos[i].empatados);
  36. }
  37. }
  38.  
  39.  

no me toma los nombres de los equipos, no entiendo porque....
espero sus respuestas. muchas gracias!

pd: alguien me puede explicar como se limpia el buffer y como funciona?

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Primeros pasos con estructuras
« Respuesta #1 en: Martes 21 de Abril de 2009, 10:12 »
0
Varios errores:

Línea 7:

Cita de: "kingsizen"
char nombre;

debería ser

Código: C
  1. char *nombre;
  2.  
o mejor:

Código: C
  1. char nombre[MAX_NOMBRE];
  2.  
así te evitas el tener que reservar memoria (claro que hay definir la constante MAX_NOMBRE).

Línea 30:

Cita de: "kingsizen"
for (i=0;i<3;++i)
que debería ser evidentemente

Código: C
  1. for (i=0;i<2;++i)
  2.  
Estaría bien que repasaras un poco tu código antes de venir con las dudas.

Salud

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Primeros pasos con estructuras
« Respuesta #2 en: Martes 21 de Abril de 2009, 18:54 »
0
Aqui tengo otro problema: quiero realizar un ordenamiento , primero lo ordeno por los puntos y luego tambien tengo ke ordenar los nombres... uso strcpy. el programa arranca, pero a la hora de devolverme los nombres me da simbolos

aqui el codigo completo

Código: C
  1.  
  2. # include <stdio.h>
  3. # include <string.h>
  4.  
  5. struct equi
  6. {      
  7.        char nombre[10];
  8.        int ganados;
  9.        int perdidos;
  10.        int empatados;
  11.        int puntos;
  12. };
  13.  
  14. void ordena (struct equi e[])
  15. {
  16.      int i,j,aux;
  17.      char aaux[10];
  18.      
  19.      for (i=0;i<2;++i)
  20.          for (j=0;j<2;++j)
  21.              if (e[i].puntos > e[j].puntos)
  22.                 {
  23.                              aux=e[i].puntos;
  24.                              e[i].puntos=e[j].puntos;
  25.                  e[j].puntos=aux;
  26.  
  27.                  strcpy(e[i].nombre,aaux);
  28.                  strcpy(e[j].nombre,e[i].nombre);
  29.                              strcpy(aaux,e[j].nombre);
  30.                              
  31.                              
  32.                              }
  33. }
  34.      
  35.      
  36.  
  37.  
  38.  
  39. main()
  40. {
  41.  
  42.  struct equi equipos[2];
  43.  int i;
  44.  for (i=0;i<2;++i)
  45.  {
  46.  printf ("Ingrese nombren");
  47.  scanf ("%s",&equipos[i].nombre);
  48.  
  49.  printf ("Ingrese Partidos ganados,perdidos y empatadosn");
  50.  scanf ("%d %d %d %d",&equipos[i].ganados,&equipos[i].perdidos,&equipos[i].empatados,&equipos[i].puntos);
  51. }
  52.  
  53. for (i=0;i<2;++i)
  54.  {
  55.  
  56.  printf ("Nombre: %s",equipos[i].nombre);
  57.  
  58.  printf ("Ganados: %d Perdidos: %d Empatados: %d ",equipos[i].ganados,equipos[i].perdidos,equipos[i].empatados);
  59. }
  60. //calcula(equipos);
  61. ordena (equipos);
  62.  
  63. for (i=0;i<2;++i)
  64.  {
  65.  
  66.  printf ("Nombre: %sn",equipos[i].nombre);
  67.  printf ("Puntos: %dn",equipos[i].puntos);
  68. }
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  

el ordenamiento de los puntos funciona bien... el problema lo tengo con el ordenamiento de nombres. cual puede ser el problema?
muchas gracias

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Primeros pasos con estructuras
« Respuesta #3 en: Martes 21 de Abril de 2009, 22:27 »
0
Creo que te has confundido a la hora de usar strcpy(), ya que el primer argumento es el destino, y el segundo el origen, es decir, se copia el segundo argumento al primero.

Dicho esto, esta sentencia tuya (línea 27):

Código: C
  1. strcpy(e[i].nombre,aaux);
  2.  
no tiene sentido puesto que aaux tiene un valor indefinido, de ahí los símbolos raros que te salen (incluso puede que pitidos y todo  :D )

Salud

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Primeros pasos con estructuras
« Respuesta #4 en: Miércoles 22 de Abril de 2009, 03:48 »
0
Excelente!. ahi lo probe y funciona!!. estaba usando mal el strcpy().
voy a seguir agregandole cosas al programa, seguramente voy a volver con mas dudas.
muchas gracias. especialmente a moskito