Programación General > C/C++
Primeros pasos con estructuras
(1/1)
kingsizen:
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 --- # include <stdio.h> struct equi { char nombre; int ganados; int perdidos; int empatados; int puntos;}; main(){ struct equi equipos[2]; int i; for (i=0;i<2;++i) { printf ("Ingrese nombren"); scanf ("%s",&equipos[i].nombre); printf ("Ingrese Partidos ganados,perdidos y empatadosn"); scanf ("%d %d %d",&equipos[i].ganados,&equipos[i].perdidos,&equipos[i].empatados);} for (i=0;i<3;++i) { printf ("Nombre: %s",equipos[i].nombre); printf ("Ganados: %d Perdidos: %d Empatados: %d",equipos[i].ganados,equipos[i].perdidos,equipos[i].empatados);}}
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:
Varios errores:
Línea 7:
--- Cita de: "kingsizen" ---char nombre;
--- Fin de la cita ---
debería ser
--- Código: C ---char *nombre; o mejor:
--- Código: C ---char nombre[MAX_NOMBRE]; 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)
--- Fin de la cita ---
que debería ser evidentemente
--- Código: C ---for (i=0;i<2;++i) Estaría bien que repasaras un poco tu código antes de venir con las dudas.
Salud
kingsizen:
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 --- # include <stdio.h># include <string.h> struct equi { char nombre[10]; int ganados; int perdidos; int empatados; int puntos;}; void ordena (struct equi e[]){ int i,j,aux; char aaux[10]; for (i=0;i<2;++i) for (j=0;j<2;++j) if (e[i].puntos > e[j].puntos) { aux=e[i].puntos; e[i].puntos=e[j].puntos; e[j].puntos=aux; strcpy(e[i].nombre,aaux); strcpy(e[j].nombre,e[i].nombre); strcpy(aaux,e[j].nombre); }} main(){ struct equi equipos[2]; int i; for (i=0;i<2;++i) { printf ("Ingrese nombren"); scanf ("%s",&equipos[i].nombre); printf ("Ingrese Partidos ganados,perdidos y empatadosn"); scanf ("%d %d %d %d",&equipos[i].ganados,&equipos[i].perdidos,&equipos[i].empatados,&equipos[i].puntos);} for (i=0;i<2;++i) { printf ("Nombre: %s",equipos[i].nombre); printf ("Ganados: %d Perdidos: %d Empatados: %d ",equipos[i].ganados,equipos[i].perdidos,equipos[i].empatados);}//calcula(equipos);ordena (equipos); for (i=0;i<2;++i) { printf ("Nombre: %sn",equipos[i].nombre); printf ("Puntos: %dn",equipos[i].puntos);} }
el ordenamiento de los puntos funciona bien... el problema lo tengo con el ordenamiento de nombres. cual puede ser el problema?
muchas gracias
m0skit0:
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 ---strcpy(e[i].nombre,aaux); 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:
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
Navegación
Ir a la versión completa