/* Se emplea un arreglo estatico de punteros void para definir una ficha de datos */ #include #include void leerDatos(void* []); void imprimeDatos(void *[]); void flushIn(void); //Limpia el buffer de entrada int main (void) { void *ficha[5]; leerDatos(ficha); imprimeDatos(ficha); return 0; } void leerDatos(void *ficha[]) { // Se definen punteros auxiliares para evitar operaciones "cast" // excesivas y complejas int *ptrInt; double *ptrDoub; char cad[500]; ptrInt= new int; printf("Ingrese el c¢digo: "); scanf("%d",ptrInt); ficha[0] = ptrInt; flushIn(); printf("Ingrese el nombre: "); gets(cad); ficha[1] = new char[strlen(cad)+1]; strcpy( (char*)ficha[1], cad); printf("Ingrese la especialidad: "); gets(cad); ficha[2] = new char[strlen(cad)+1]; strcpy( (char*)ficha[2], cad); ptrInt = new int; printf("Ingrese la escala de pago: "); scanf("%d",ptrInt); ficha[3] = ptrInt; ptrDoub = new double; printf("Ingrese los cr‚ditos aprobados: "); scanf("%lf",ptrDoub); ficha[4] = ptrDoub; } void imprimeDatos(void *ficha[]) { printf("\nC¢digo: %ld\n", *(int*)(ficha[0])); printf("Nombre: %-30s\n", (char*)(ficha[1])); printf("Especialidad: %-30s\n", (char*)(ficha[2])); printf("Escala de pago: %d\n", *(int*)(ficha[3])); printf("Cr‚ditos aprobados: %3.1lf\n", *(double*)(ficha[4])); } void flushIn(void) { while (getchar()!='\n'); }