Dev - C++ - ayuda con arreglos de estructuras

 
Vista:
sin imagen de perfil
Val: 33
Ha disminuido su posición en 4 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con arreglos de estructuras

Publicado por Jorge (24 intervenciones) el 05/07/2019 05:03:01
Bueno ya me habian ayudado antes diciendome que para pasar los valores de un arreglo de estructuras a una funcion no hay nesesidad de usar el ' -> ' ya que la struct esta definida globalmente; pero ahora pasa que cuando defino la struct en el main me sale como si la funcion estubiera vacia, solo quiero saber de que manera pasar arreglos de estructuras definidas en el main hacia funciones pa modificar sus valores aca esta el problem

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
#include <stdio.h>
 
void datos(alumnos *alu);
 
main()
{
	struct alumnos {
		int calif;
		char nombre[15];
	};
 
	alumnos alu[5];
	datos(&alu[0]);
}
 
void datos(alumnos *alu)
{
	int a,b;
	for(a=0;a<5;a++)
	{
		printf("Ingrese el nombre del alumno: \t %d \n",a+1);
		gets(alu[a]->nombre);
		printf("Ingrese la calificacion del alumno: \t %d \n",a+1);
		scanf("%d", &alu[a]->calif);
	}
	for(b=0;b<5;b++)
	{
		printf("Alumno: \t %s \n",alu[b]->nombre);
		printf("Calificacion: \t %d \n",alu[b]->calif);
	}
}
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++

ayuda con arreglos de estructuras

Publicado por Thanatos (199 intervenciones) el 05/07/2019 07:17:23
Si defines la estructura dentro de una función, sólo será «visible» dentro de esa función. En tu código, la estructura alumnos no existe fuera de la función main, por esto ocurre un error al pasarle un argumento de tipo struct alumnos a la función datos.

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
#include <stdio.h>   // printf(), scanf(), fgets()
#include <string.h>  // strcspn()
 
enum { MAX_ALUM = 5, SIZE_NOM = 16 };
 
typedef struct Alumno Alumno;
struct Alumno
{
    char nombre[SIZE_NOM];
    int nota;
};
 
void leerDatos(Alumno *, const int);
void mostrarDatos(const Alumno *, const int);
void limpiarBuffer(void);
 
int main(void)
{
    Alumno alumnos[MAX_ALUM];
 
    leerDatos(alumnos, MAX_ALUM);
    mostrarDatos(alumnos, MAX_ALUM);
 
    return 0;
}
 
void leerDatos(Alumno *alumnos, const int nAlumnos)
{
    printf("Ingrese los datos de los %i alumnos:\n\n", nAlumnos);
 
    for (int i = 0; i < nAlumnos; ++i)
    {
        printf("ALUMNO #%i\n", i + 1);
 
        printf("Nombre: ");
        (void) fgets(alumnos[i].nombre, SIZE_NOM, stdin);
        alumnos[i].nombre[strcspn(alumnos[i].nombre, "\r\n")] = '\0';
 
        printf("Nota: ");
        scanf("%i", &alumnos[i].nota);
 
        printf("\n");
        limpiarBuffer();
    }
}
 
void mostrarDatos(const Alumno *alumnos, const int nAlumnos)
{
    for (int i = 0; i < nAlumnos; ++i)
    {
        printf("%s --> %i\n", alumnos[i].nombre, alumnos[i].nota);
    }
    printf("\n");
}
 
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