Dev - C++ - struct, memoria dinamica, voids

 
Vista:

struct, memoria dinamica, voids

Publicado por ÚNAM (1 intervención) el 02/02/2020 01:30:01
Tengo un problema con mi código o quiero que haga algo pero no se cono hacerlo y necesito ayuda de alguien que sepa como hacerlo.

Lo que quiero que pase es que el struct, usando memoria dinámica, que haga los arreglo con un void y que imprima el arreglo, también con void.

Para imprimir con void no tengo problema pero lo que no puedo hacer que que guarde en el arreglo usando el void, espero que puedan ayudarme y gracias por su tiempo si es que me ayudan con el código.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Alumno{
    char *nombre;
    int matricula;
    int promedio;
}Alumno;
 
 
//void iniciar_arre_alumnos(int *cant,int * arre_alumnos);
void imprimir_arre(int * cant,const Alumno *a);
 
int main(void)
{
    Alumno * arre_alumnos;
    int * cant;
 
    srand (time(NULL));
    cant = 5+rand() % 30 - 5;
    printf("El numero aleatorio es: %d\n",cant);
 
 
    arre_alumnos = (Alumno *)malloc(sizeof(Alumno)*30);
 
    for(int i = 0; i < cant; i++){
        int a = rand() % 11;
        arre_alumnos[i].nombre = "Alan";
        arre_alumnos[i].matricula = i+1;
        arre_alumnos[i].promedio = a;
    }
 
 
 
    //iniciar_arre_alumnos(&cant,&arre_alumnos);
 
    imprimir_arre(cant,arre_alumnos);
 
    free(arre_alumnos);
    return 0;
}
 
/*void iniciar_arre_alumnos(int * cant,int * arre_alumnos){
    for(int i = 0; i < cant; i++){
        int matricula = i+1;
        arre_alumnos[i];matricula = matricula;
        int promedio = rand() % 10;
        arre_alumnos[i];promedio = promedio;
    }
}*/
 
void imprimir_arre(int * cant,const Alumno *a){
    for(int i = 0; i < cant;i++){
        printf("_______________\n");
        printf("Nombre: %s\n", a[i].nombre);
        printf("matricula: %d\n", a[i].matricula);
        printf("Promedio: %d\n", a[i].promedio);
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

struct, memoria dinamica, voids

Publicado por Thanatos (199 intervenciones) el 02/02/2020 12:11:25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>   // printf(), scanf(), fgets(), fprintf()
#include <stdlib.h>  // srand(), rand(), malloc(), free()
#include <string.h>  // strcspn()
#include <time.h>    // time()
 
#define MAX_NOMBRE 32
 
typedef struct Alumno Alumno;
struct Alumno {
    char *nombre;
    int matricula;
    int promedio;
};
 
void leerDatos(Alumno *alumnos, const int cantidad);
void mostrarDatos(const Alumno *alumnos, const int cantidad);
void reservarMemoria(Alumno **alumnos, const int cantidad);
void liberarMemoria(Alumno *alumnos, const int cantidad);
void limpiarBuffer(void);
 
int main(void) {
    Alumno *alumnos = NULL;
    int cantidad;
 
    srand((unsigned) time(NULL));
    cantidad = 5 + rand() % 26;  // De 5 a 30 alumnos.
    printf("La cantidad es: %i\n\n", cantidad);
 
    reservarMemoria(&alumnos, cantidad);
    leerDatos(alumnos, cantidad);
    mostrarDatos(alumnos, cantidad);
    liberarMemoria(alumnos, cantidad);
 
    return 0;
}
 
void leerDatos(Alumno *alumnos, const int cantidad) {
    for (int i = 0; i < cantidad; ++i) {
        printf("Nombre: ");
        (void) fgets(alumnos[i].nombre, MAX_NOMBRE, stdin);
        alumnos[i].nombre[strcspn(alumnos[i].nombre, "\n")] = '\0';
 
        printf("Matricula: ");
        scanf("%i", &alumnos[i].matricula);
 
        printf("Promedio: ");
        scanf("%i", &alumnos[i].promedio);
 
        limpiarBuffer();
        printf("\n");
    }
}
 
void mostrarDatos(const Alumno *alumnos, const int cantidad) {
    for (int i = 0; i < cantidad; ++i) {
        printf(
            "Nombre -----> %s\n"
            "Matricula --> %i\n"
            "Promedio ---> %i\n\n",
            alumnos[i].nombre,
            alumnos[i].matricula,
            alumnos[i].promedio
        );
    }
}
 
void reservarMemoria(Alumno **alumnos, const int cantidad) {
    if (cantidad < 0) {
        fprintf(stderr, "\n* Se esperaba una cantidad positiva. *\n");
        return;
    }
 
    *alumnos = malloc((size_t) cantidad * sizeof **alumnos);
    if (*alumnos == NULL) {
        fprintf(stderr, "\n* Error al reservar memoria *\n");
        return;
    }
 
    for (int i = 0; i < cantidad; ++i) {
        (*alumnos)[i].nombre = malloc(MAX_NOMBRE);
        if ((*alumnos)[i].nombre == NULL) {
            fprintf(stderr, "\n* Error al reservar memoria *\n");
            free(*alumnos);
            break;
        }
    }
}
 
void liberarMemoria(Alumno *alumnos, const int cantidad) {
    for (int i = 0; i < cantidad; ++i) {
       free(alumnos[i].nombre);
       alumnos[i].nombre = NULL;
    }
 
    free(alumnos);
    alumnos = NULL;
}
 
void limpiarBuffer(void) {
    int ch;
 
    while ((ch = getchar()) != '\n' && ch != EOF) { }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar