C/Visual C - ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

 
Vista:

ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por maykel (2 intervenciones) el 07/02/2010 13:38:04
Hola Chic@s.
Tengo el siguiente codigo en C:

*********************************************************************************************************************

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CIERTO 1
#define FALSO 0
#define MAXNOMBRE 30
#define MAXTLF 15
#define MAXALUMNOS 2
#define MAXNOTAS 2
#define MAXASIG 15

typedef short int LOGICO;
typedef struct rnota
{
char asignatura[MAXASIG];
float nota;
}Rnota;

typedef Rnota TRnotas[MAXNOTAS];
typedef TRnotas Notas;

typedef struct Ralumno
{
char nombre[MAXNOMBRE];
char tlf[MAXTLF];
Notas notas;
}Ralumno;

typedef Ralumno Talumnos[MAXALUMNOS];
typedef Talumnos Grupo;

void LeerAlumnos(Ralumno *pcl);

int main(int argc, char** argv) {

Grupo clase;
Ralumno *pclase;
int i;

LeerAlumnos(pclase);

return (EXIT_SUCCESS);
}

void LeerAlumnos(Ralumno *pcl)
{
int i,j;
char aux;

printf("\nLeyendo Alumnos. pclase apunta a: %p. y pnotas a %p.\n",pcl,pcl->notas);
for(i=0;i<MAXALUMNOS;i++)
{
printf("\nIntroduzca Nombre del Alumno %i: ",i);
fgets(pcl->nombre,MAXNOMBRE,stdin);
printf("\nIntroduzca Tlf del Alumno %i: ",i);
fgets(pcl->tlf,MAXTLF,stdin);
printf("\nRecogiendo Notas del Alumno: %s.\n",pcl->nombre);
for(j=0;j<MAXNOTAS;j++)
{
printf("\nIntroduzca Nombre Asignatura %i: ",j);
fgets(pcl->notas->asignatura,MAXASIG,stdin);
printf("\nIntroduzca Nota Asignatura %s: ",pcl->notas->asignatura);
scanf("%f",&pcl->notas->nota);
scanf("%c",&aux);

pcl->notas++; //ME DA ERROR AQUI Y NO SE PORQUE..........

}
pcl++;
}
}

*********************************************************************************************************************

El error que me da en la instrucción ( " pcl->notas++; ") es el siguiente:

error: lvalue required as increment operand

La verdad no entiendo porque me da error en ese incremento y no me da en el de abajo (" pcl++; "). He probado incluso poniendole paréntesis así: pcl->(notas++); e incluso así: (pcl->notas++); y siempre me da el mismo error.

¿ALGUN MASTER SABE DE QUE SE PUEDE TRATAR.?.
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

RE:ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por Tom (619 intervenciones) el 08/02/2010 11:49:07
diossss ... que lío de typedefs :D

Notas es un tipo para el compilador, y notas no es un puntero, por eso no lo puedes incrementar.

De todos modos, si eso funcionara, notas siempre apuntaría a la última, o sea, te cargarías el array.

En tu código, el uso lógico es indexando, no tratando de hacer aritmética de punteros:

fgets(pcl->notas[j].asignatura,MAXASIG,stdin);
...
scanf("%f",&pcl->notas[j].nota);
...

(o, si te va el frikismo, quizás podría ser ¬as[0]+j)
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

RE:ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por Tom (619 intervenciones) el 08/02/2010 12:12:32
Esto funcionaría, y, EMHO seía mucho más claro de leer y entender por otra persona:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CIERTO 1
#define FALSO 0
#define MAXNOMBRE 30
#define MAXTLF 15
#define MAXALUMNOS 2
#define MAXNOTAS 2
#define MAXASIG 15

struct RNOTA {
char asignatura[MAXASIG];
float nota;
};

typedef struct {
char nombre[MAXNOMBRE];
char tlf[MAXTLF];
struct RNOTA notas[MAXNOTAS];
} Ralumno;

/* */
int main(int argc, char** argv) {
void LeerAlumnos(Ralumno *);
Ralumno clase[MAXALUMNOS];

LeerAlumnos(clase);

return (EXIT_SUCCESS);
}
/* */
void LeerAlumnos(Ralumno grupo[]) {
int i,j;
char aux;

for(i=0; i<MAXALUMNOS; i++) {
Ralumno pcl = grupo[i];

printf("\nIntroduzca Nombre del Alumno %i: ",i);
fgets(pcl.nombre, MAXNOMBRE, stdin);
printf("\nIntroduzca Tlf del Alumno %i: ",i);
fgets(pcl.tlf, MAXTLF, stdin);
printf("\nRecogiendo Notas del Alumno: %s.\n",pcl.nombre);
for(j=0; j<MAXNOTAS; j++) {
printf("\nIntroduzca Nombre Asignatura %i: ",j);
fgets(pcl.notas[j].asignatura, MAXASIG, stdin);
printf("\nIntroduzca Nota Asignatura %s: ",pcl.notas[j].asignatura);
scanf("%f",&pcl.notas[j].nota);
scanf("%c",&aux);
}
}
}
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

RE:ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por maykel (2 intervenciones) el 09/02/2010 09:30:04
HOla Tom.
Pues la verdad es que sí, me encanta el frikismo y lo que pretendo es hacer dicho incremento pero con el operador flecha y presciendiendo de indices. Tengo una versión hecha con índices y la verdad, en cuanto a claridad es mucho mejor, pero en este caso como te he dicho, necesito hacerlo a base de punteros, y no se si será posible o no.

De todas formas, gracias por dedicar tu tiempo a los demás.
Saludos.
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

RE:ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por Tom (619 intervenciones) el 09/02/2010 11:52:36
En ese caso necesitas algo así:

for(j=0;j<MAXNOTAS;j++) {
RNota *notaActual = &(pcl->notas[0]);
...
...
fgets(notaActual->asignatura, MAXASIG, stdin);
...
notaActual++;
}

Recuerda que si cambias el valor notas, quedará cambiado "para siempre" :D
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

RE:ERRORES CON PUNTEROS A ARRAYS DE ESTRUCTURAS.

Publicado por Tom (619 intervenciones) el 09/02/2010 12:59:01
Las prisas son malas :$

RNota *notaActual = &(pcl->notas[0]);

for(j=0;j<MAXNOTAS;j++) {
..
...
fgets(notaActual->asignatura, MAXASIG, stdin);
...
notaActual++;
}
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