Autor
|
Tema: Imprimir array de Structs (Leído 2,810 veces)
|
dennis094
Desconectado
Mensajes: 185
Embrace your dreams, protect your honor
|
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: /* ============================================================================ 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
Mensajes: 1.639
|
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: #include <string.h> /* ... */ void leer(int num) { int i; int ch; char *p; for (i = 0; i < num; i++){ fgets(arrayPersonas [i ]. nombre, 50, stdin ); /* Eliminamos (si existe) el avance de linea del nombre */ if ((p = strchr(arrayPersonas [i ]. nombre, '\n')) != NULL ) *p = '\0'; fgets(arrayPersonas [i ]. apellido, 50, stdin ); /* Eliminamos (si existe) el avance de linea del apellido */ if ((p = strchr(arrayPersonas [i ]. apellido, '\n')) != NULL ) *p = '\0'; scanf("%c", &arrayPersonas [i ]. sexo); /* Descartamos el resto de la linea */ while ((ch = getchar()) != EOF && ch != '\n') ; } }
El programa funcionara correctamente. Por ultimo hay que eliminar la variable "p": 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
Mensajes: 185
Embrace your dreams, protect your honor
|
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
Mensajes: 1.639
|
¿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: struct cadena { char *ch; size_t num_chars; }; /* ... */ struct cadena linea[100]; size_t num_lineas = 0; struct cadena aux; /* ... */ /* Agregamos manualmente una linea (almacenada en el auxiliar) */ linea[num_lineas] = aux; 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Structs Y Clases
.NET (C#, VB.NET, ASP)
|
anion
|
1
|
2,444
|
14 Julio 2007, 04:26 am
por MANULOMM
|
|
|
Duda con un array, imprimir sus valores a la inversa.
Java
|
KaRaLLo
|
7
|
15,604
|
21 Enero 2012, 14:47 pm
por KaRaLLo
|
|
|
(SOLUCIONADO) Ayuda con los structs
« 1 2 »
Programación C/C++
|
BlackM4ster
|
13
|
6,365
|
23 Marzo 2013, 14:29 pm
por BlackM4ster
|
|
|
error al imprimir la informacion de array
Java
|
fprg
|
1
|
1,854
|
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
|
3 Junio 2017, 05:31 am
por Eleкtro
|
|