/* Programa que emplea un doble puntero 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; ficha = leerDatos(); imprimeDatos(ficha); return 0; } void **leerDatos(void) { // Se definen punteros auxiliares para evitar operaciones "cast" // excesivas y complejas void ** auxVoid; int *ptrInt; double *ptrDoub; char cad[500]; auxVoid = new void *[5]; ptrInt= new int; printf("Ingrese el c¢digo: "); scanf("%d",ptrInt); auxVoid[0] = ptrInt; flushIn(); printf("Ingrese el nombre: "); gets(cad); auxVoid[1] = new char[strlen(cad)+1]; strcpy( (char*)auxVoid[1], cad); printf("Ingrese la especialidad: "); gets(cad); auxVoid[2] = new char[strlen(cad)+1]; strcpy( (char*)auxVoid[1], cad); ptrInt = new int; printf("Ingrese la escala de pago: "); scanf("%d",ptrInt); auxVoid[3] = ptrInt; ptrDoub = new double; printf("Ingrese los cr‚ditos aprobados: "); scanf("%lf",ptrDoub); auxVoid[4] = ptrDoub; return auxVoid; } 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'); }