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; }