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


Tema destacado: Como proteger una cartera - billetera de Bitcoin


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

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Imprimir array de Structs
« en: 16 Enero 2014, 00:41 am »

Buenas,
tengo una ejercicio sobre structs bastante simple, solo tengo que leer unas cuantas personas por teclado (nombre apellidos y sexo) e imprimirlos... la cosa es que no lo consigo xD

La cosa es que yo quiero indicar cuantas personas quiero dar de alta, introducir sus datos, e ir guardando cada persona con sus atributos en un array de personas, para mas adelante imprimir ese array.

os dejo el codigo:
Código:
/*
 ============================================================================
 Name        : Arrays1.c
 Author      :
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

#define MAX 30

typedef char cadena[50];
typedef char texto[200];

typedef struct {
cadena nombre;
cadena apellido;
char sexo;
}persona;

persona p;
typedef persona personas[MAX]; // array de personas
personas arrayPersonas; // inicializamos el array de personas

void leer(int num){
int i;

for(i=0;i<num;i++){ // dara de alta tantas personas como yo le indique por teclado
printf("Nombre:");
gets(p.nombre);
fflush(stdin); // limpiamos el buffer de entrada
printf("\nApellido:");
gets(p.apellido);
fflush(stdin);
printf("\nSexo:");
scanf("%c", &p.sexo);
fflush(stdin);

persona p ={ p.nombre, p.apellido, p.sexo };
arrayPersonas[i] = p;
}

}

void imprime(int num){
int i;
for(i=0;i<num;i++){
printf("%s, %s - sexo %c",arrayPersonas[i].apellido, arrayPersonas[i].nombre, arrayPersonas[i].sexo);
}
}

int main(void) {
int numP;

printf("Numero de personas que desea dar de alta:");
scanf("%d", &numP);
fflush(stdin);

leer(numP);
imprime(numP);

return 0;
}

El fallo esta claramente en que la persona "p" que doy de alta en la funcion "leer", no se guarda correctamente en el array de personas, quiza es que esa no sea la sintaxis correcta para agregar a la persona que he creado a mi array.

Un saludo, espero vuestra ayuda.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Imprimir array de Structs
« Respuesta #1 en: 16 Enero 2014, 02:39 am »

Lo primero que debes hacer es evitar el uso de gets y fflush(stdin), las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

El problema se debe (como indicas) a que la sintaxis que utilizas en la función "leer" no es la correcta. En esa función no necesitas de una variable auxiliar ya que puedes utilizar directamente el elemento del array "arrayPersonas".

Si incluimos el encabezado <string.h> y modificamos la función:
Código
  1. #include <string.h>
  2.  
  3. /* ... */
  4.  
  5. void leer(int num)
  6. {
  7.   int i;
  8.   int ch;
  9.   char *p;
  10.  
  11.   for (i = 0; i < num; i++){
  12.      puts("Nombre:");
  13.      fgets(arrayPersonas[i].nombre, 50, stdin);
  14.      /* Eliminamos (si existe) el avance de linea del nombre */
  15.      if ((p = strchr(arrayPersonas[i].nombre, '\n')) != NULL)
  16.         *p = '\0';
  17.  
  18.      puts("Apellido:");
  19.      fgets(arrayPersonas[i].apellido, 50, stdin);
  20.      /* Eliminamos (si existe) el avance de linea del apellido */
  21.      if ((p = strchr(arrayPersonas[i].apellido, '\n')) != NULL)
  22.         *p = '\0';
  23.  
  24.      puts("Sexo:");
  25.      scanf("%c", &arrayPersonas[i].sexo);
  26.  
  27.      /* Descartamos el resto de la linea */
  28.      while ((ch = getchar()) != EOF && ch != '\n')
  29.         ;
  30.   }
  31. }
El programa funcionara correctamente. Por ultimo hay que eliminar la variable "p":
Código
  1. persona p;
Ya que no se utiliza en el programa.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Re: Imprimir array de Structs
« Respuesta #2 en: 16 Enero 2014, 23:22 pm »

Joer, que sencillo, simplemente guardar la entrada de teclado en el array directamente, nose porque me empeñe en guardarlo dentro de una persona, y luego intentar agregar a esa persona al array... supongo que estaria cansado ya y no lo veia jajajaja

Por curiosidad, ¿en c hay alguna funcion como en java con la funcion "puts" que te permitia agregar un objeto (en este caso un struct) al array?
Muchas gracias ;)
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Imprimir array de Structs
« Respuesta #3 en: 17 Enero 2014, 02:09 am »

¿en c hay alguna funcion como en java con la funcion "puts" que te permitia agregar un objeto (en este caso un struct) al array?
No.

En C la operación debe hacerse manualmente, lo usual es tener un array del tamaño "apropiado" y un contador del numero de elementos utilizados. Para agregar el elemento simplemente se asigna y se incrementa el contador, por ejemplo:
Código
  1. struct cadena {
  2.   char *ch;
  3.   size_t num_chars;
  4. };
  5.  
  6. /* ... */
  7.  
  8. struct cadena linea[100];
  9. size_t num_lineas = 0;
  10. struct cadena aux;
  11.  
  12. /* ... */
  13.  
  14. /* Agregamos manualmente una linea (almacenada en el auxiliar) */
  15. linea[num_lineas] = aux;
  16. num_lineas++;

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Structs Y Clases
.NET (C#, VB.NET, ASP)
anion 1 2,444 Último mensaje 14 Julio 2007, 04:26 am
por MANULOMM
Duda con un array, imprimir sus valores a la inversa.
Java
KaRaLLo 7 15,604 Último mensaje 21 Enero 2012, 14:47 pm
por KaRaLLo
(SOLUCIONADO) Ayuda con los structs « 1 2 »
Programación C/C++
BlackM4ster 13 6,365 Último mensaje 23 Marzo 2013, 14:29 pm
por BlackM4ster
error al imprimir la informacion de array
Java
fprg 1 1,854 Último mensaje 19 Noviembre 2013, 19:56 pm
por Mitsu
Array de structs duda con los nombres C#
.NET (C#, VB.NET, ASP)
RevolucionVegana 2 3,398 Último mensaje 3 Junio 2017, 05:31 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines