Hola, que tengan un muy buen día.
Tengo una duda y espero en primer lugar que se entienda lo que no logro hacer y luego que pueda alguien darme la solución. -
Estas líneas de código las quiero pasar a una función:
if((p
=strchr((b
+max
)->nombre
, '\n'))){ *p='\0';
}else{
while((ch
= getchar()) !='\n' && ch
!=EOF
); }
................................
if((p
=strchr((b
+max
)->direccion
, '\n'))){ *p='\0';
}else{
while((ch
= getchar()) !='\n' && ch
!=EOF
); }
En primer lugar, pasar un solo campo y no el total de la estructura.
luego que los cambios efectuados en la función llamada se vean reflejado en la función llamadora(main). -
El código completo.
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char nombre[30];
char direccion[30];
int edad;
}alumno;
int main( void ){
alumno *b=NULL;
int max=1, i, ch=0, seguir=0;
char *p = NULL;
do{
b
= ( alumno
* )realloc( b
, (max
)*sizeof(alumno
)); if( b==NULL ){
printf("\n No se pudo asignar la memoria!"); }
printf("\n Ingresa el nombre del alumno [%d]......:", max
); fgets( (b
+max
)->nombre
, 30, stdin
);
if((p
=strchr((b
+max
)->nombre
, '\n'))){ *p='\0';
}else{
while((ch
= getchar()) !='\n' && ch
!=EOF
); }
printf("\n Ingresa la direccion del alumno [%d]...:", max
); fgets( (b
+max
)->direccion
, 30, stdin
);
if((p
=strchr((b
+max
)->direccion
, '\n'))){ *p='\0';
}else{
while((ch
= getchar()) !='\n' && ch
!=EOF
); }
printf("\n Ingresa la edad del alumno [%d]........:", max
); scanf( "%d", &(b
+max
)->edad
);
printf( "\n distinto a \"0\" introduce otro alumno.: " ); max++;
}while( seguir != 0 );
for ( i=0; i<max; i++ ){
printf( "%s\t%s\t%d\n",(*(b
+i
)).
nombre, (*(b
+i
)).
direccion, (*(b
+i
)).
edad ); }
return 0;
}
Saludos y gracias. -