Cómo editar los valores de estructura después de pasarlos
Hola chicos, solo quiero leer los estudiantes de un archivo y luego pedir al usuario que agregue un nuevo estudiante, pero primero tengo que agregarlo a mi estructura y realmente no sé cómo editar o añadir estudiantes a mi estructura asignada. Por favor, enséñame cómo enviar los valores de mi estructura a cualquier otra función y editarlos.
struct estudiante {
char personnummer[11];
char förnamn[11];
char efternamn[10];
char genero[7];
char programmdife[20];
char edad[4];
char correo[30];
//struct likaprogramms *likaprogramm;
} *personer;
void f(struct estudiante <em>*x)
{
char str[200];
int j=0;
struct estudiante *personer = (struct estudiante</em>)malloc(j * sizeof(struct estudiante));
FILE* f;
f = fopen("elever.txt", "r");
while (fgets(str,sizeof str, f)!=NULL )
{
sscanf(str, "%10s %9s %9s %6s %19s %3s %29s", personer[j].personnummer,personer[j].förnamn, personer[j].efternamn, personer[j].genero, personer[j].programmdife, personer[j].edad, personer[j].correo);
printf("%10s %9s %9s %6s %19s %3s %29s\n", personer[j].personnummer,personer[j].förnamn, personer[j].efternamn, personer[j].genero, personer[j].programmdife, personer[j].edad, personer[j].correo);
j++;
*x=personer;
}
fclose(f);
//free(personer);
}
int i;
int main()
{
getchar();
printf("escriba nuevo número de persona\n");
getchar();
fgets(personer->personnummer,11,stdin);
printf("escriba nombre\n");
getchar();
fgets(personer->förnamn,50,stdin);
printf("escriba genero\n");
fgets(personer->genero,20,stdin);
printf("escriba programa\n");
fgets(personer->programmdife,50,stdin);
printf("escriba edad\n");
getchar();
fgets(personer->edad,4,stdin);
printf("escriba correo\n");
getchar();
fgets(personer->correo,40,stdin);
// printf("%s %s %s %s %s %s %s", personnummer,förnamn,efternamn,gender,programm,age,email);
return 0;
}
davy.ai
Primero, para agregar un nuevo estudiante a la estructura asignada, necesitas reasignar memoria para el arreglo
personer
utilizandorealloc
. Aquí tienes un ejemplo:En esta función, pasamos un puntero
x
al arreglopersoner
asignado, así como un punteronum_students
al número actual de estudiantes en el arreglo. Primero incrementamosnum_students
para reflejar la adición de un nuevo estudiante. Luego, utilizamosrealloc
para asignar memoria al arreglopersoner
actualizado. Si la asignación de memoria falla, salimos del programa.A continuación, solicitamos al usuario los datos del nuevo estudiante utilizando
fgets
. Accedemos a los datos del nuevo estudiante utilizando(*x)[*num_students-1]
, que utiliza aritmética de punteros para acceder a los elementos del estudiante recién agregado.Para enviar los valores de la estructura a otra función, puedes pasar un puntero a la estructura como parámetro. Aquí tienes un ejemplo:
En esta función, pasamos un puntero
s
a una estructurastudent
. Luego utilizamos el operador->
para acceder a los elementos de la estructura e imprimir sus valores. Para llamar a esta función, puedes pasar un puntero a una variable de tipostruct student
, de la siguiente manera:Esto imprimiría los valores del primer estudiante en el arreglo
personer
.Nota: En el código original, el arreglo
personer
se declara como una variable global, por lo que no es necesario pasarla a otras funciones utilizando punteros. Sin embargo, si quisieras pasarla como parámetro, podrías hacerlo de la siguiente manera:En este ejemplo, pasamos el arreglo
personer
y el contadornum_students
como parámetros a la funciónsome_function
.