2014

Leer Personas

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

/*Definicion de estructura Persona, la cual tiene como atributos nombre (tipo string), edad (tipo entero) y saldo (tipo float) */
typedef struct
{
 char nombre[50];
 int edad;
 float saldo;
} Persona;


/*creamos una funcion LeerPersonas que devuelve un entero y recibe un puntero a Persona llamado clientes */
int LeerPersonas(Persona *clientes)
{
 int n =0;
/*creamos un puntero llamado end, el cual es llenado con "END\n" */
 char end[]="END\n";

/*Llenamos, a traves del terminal, el puntero clientes (el cual es una estructura Persona) con los atributos nombre, edad y saldo (el cual inicializamos a 0). Llenaremos con personas hasta que entreguemos la palabra END y presionemos enter. */
 while(1)
  {
   printf(" Ingrese nuevo nombre : " );
/*fgets en este caso toma el string que escribimos en el terminal y se lo entrega al atributo nombre de la es
tructura llamada clientes */
   fgets(clientes[n].nombre,sizeof(clientes[n].nombre),stdin);
//   printf("%s  %d \n",clientes[n].nombre,clientes[n].edad);
/* Si el nombre que escribimos es END y damos enter, es decir, "END\n", como el puntero end, entonces el programa deja de recibir entradas de clientes */
   if(!strcmp(clientes[n].nombre, end )) break ;
   printf( " Ingrese edad : " );
   scanf("%d",&clientes[n].edad);
/*debido a que al poner la edad (declarada como un entero) presionamos enter, ese enter lo tomara getc(stdin)*/
   getc(stdin);
   clientes[n].saldo = 0.0;
   n++;
  }
return n ; /* Devuelve el numero de personas */
}

/*Creamos la funcion MostrarPersonas que recibe un puntero a Persona llamado clientes y un entero n (cantidad total de clientes), e imprime los clientes con todos sus atributos */
void MostrarPersonas(Persona * clientes , int n)
{
 for (int i =0; i < n ; i ++)
  {
   printf( " %s (%d), saldo : %f \n " , clientes[i].nombre , clientes[i].edad , clientes[i].saldo );
  }
}

/*La funcion main */
int main()
{
/*declaramos un puntero a Persona llamado clientes*/
 Persona * clientes ;
/*reservamos memoria con la funcion malloc() dependiendo de la cantidad de clientes que ingresaremos */
 clientes = ( Persona *)(malloc(sizeof(Persona)*2000));
/*obtenemos la cantidad de clientes ingresados por terminal */
 int n = LeerPersonas(clientes);
/*Cambiamos el tama~no de la memoria reservada con realloc() en caso que n sea menor a 2000, esto para no mal utilizar memoria. No es necesario hacerlo. */
 if(n<2000) clientes= (Persona *)(realloc(clientes,sizeof(Persona)*n));
/*Imprimimos todos los clientes con la funcion MostrarPersonas*/
 MostrarPersonas(clientes,n);
/*devolvemos la memoria pedida*/
 free(clientes);
 return 0;
}

<< back

University

Personal

edit SideBar