Foros del Web » Programación para mayores de 30 ;) » C/C++ »

puntero a estructura

Estas en el tema de puntero a estructura en el foro de C/C++ en Foros del Web. Hola, tengo el siguiente programa donde uso array de estructuras y punteros. Cuando lo ejecuto me da el siguiente error: 12 C:\Users\asus\Desktop\puntero a estructura.c two ...
  #1 (permalink)  
Antiguo 25/07/2010, 06:16
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
puntero a estructura

Hola, tengo el siguiente programa donde uso array de estructuras y punteros. Cuando lo ejecuto me da el siguiente error: 12 C:\Users\asus\Desktop\puntero a estructura.c two or more data types in declaration of `main'

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.   struct alumno{
  6.         char nombre[30];
  7.         char apellido[40];
  8.         char telefono[10];
  9.   }
  10.  
  11.  
  12. int main(){
  13.    int i;
  14.    struct alumno clase[5];
  15.    struct alumno *pa;
  16.          
  17.    for(i=0; i<5; i++){  
  18.      printf("Alumno nº %d:\n", i+1);
  19.      printf("Nombre: ");
  20.      scanf("%29s", clase[i].nombre);
  21.      printf("Apellidos: ");
  22.      scanf("%39s",clase[i].apellido);
  23.      printf("Telefono: ");
  24.      scanf("%9s",clase[i].telefono);
  25.    }  
  26.    pa=clase;
  27.    for(i=0; i<5; i++){
  28.         printf("\n\nAlumno nº %d:\n", i+1);
  29.         printf("Nombre: %s\n", pa->nombre);
  30.         printf("Apellidos: %s\n", pa->apellido);
  31.         printf("Telefono: %s\n", pa->telefono);
  32.    }
  33.    getchar();
  34.    getchar();
  35. }
  #2 (permalink)  
Antiguo 25/07/2010, 06:55
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: puntero a estructura

Linea 9, te falta un ";" al final de la definicion del tipo (despues de "}" )
  #3 (permalink)  
Antiguo 25/07/2010, 09:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: puntero a estructura

Este ejercicio lo he encontrado en un libro, lo que no entiendo es por qué a la hora de imprimir los distintos campos hace lo siguiente: pa->nombre, si cuando lo ejecuto me imprime cinco veces el primer registro. En cambio, si hago pa[i].nombre, pa[i].apellido, etc... me imprime los datos de cada uno de los alumnos. ¿Podéis explicarme por qué pasa esto?. Gracias.
  #4 (permalink)  
Antiguo 25/07/2010, 09:38
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: puntero a estructura

Eso parece ser un error del ejemplo.
Una es como vos hiciste. La otro seria hacer al principio del for:
pa = clase[i];

Ahi ahi si podes usar la flecha.

La idea de la flecha es desreferenciar rapidamente para poder acceder a los datos. Como podes ver si tenemos un puntero no podemos usar el "." (punto) para acceder a los datos porque es un puntero y no la estructura en si. Eso deberia ser asi:
(*clase).nombre
para no escribir eso todo el tiempo y ya que los punteros a estructura son muy usados, se implemento esa flecha que hace las veces de ese atajo:
clase->nombre

Tambien se puede usar los corchetes " [ ]" que se usan para desreferenciar (*) para antes de eso se le suma cierto indice, que es el que va entre parentesis. Eso da la idea de tabla.
  #5 (permalink)  
Antiguo 25/07/2010, 12:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: puntero a estructura

He encontrado otro ejemplo de puntero a estructura:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct persona{
  5.     char nombre[30];
  6.     int edad;
  7. };
  8. int main(){
  9.    
  10.     struct persona *p1;
  11.     p1=(struct persona *)malloc(1*sizeof(struct persona));
  12.    
  13.     printf("Nombre: ");
  14.     scanf("%29s", p1->nombre);
  15.     printf("Edad: ");
  16.     scanf("%d", &p1->edad);
  17.     free(p1);
  18.  
  19.     printf("%s\n", p1->nombre);
  20.     printf("%d\n", &p1->edad);
  21.     getchar();
  22.     getchar();
  23. }

Quiero imprimir el registro, pero cuando lo hago me sale esto:
x7r
7475360(me suena que puede ser la dirección de memoria ¿no?)

La función malloc, ¿es para reservar la memoria de un registro?. Gracias.
  #6 (permalink)  
Antiguo 25/07/2010, 13:43
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: puntero a estructura

La funcion malloc es para reservar memoria. Asi cuando se termina una funcion, la informacion no se pierde. Y cuando no la necesitas mas se usa la funcion Free.

Para que funciones bien, deberias mover de leguar el free al final de todo.
  #7 (permalink)  
Antiguo 25/07/2010, 18:11
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: puntero a estructura

En la linea 20, estas imprimiendo la direccion de memoria. Eso es lo que hace el operador "&"
  #8 (permalink)  
Antiguo 25/07/2010, 19:22
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: puntero a estructura

yo haria esto:
Cita:
#include <stdio.h>
#include <stdlib.h>


typedef struct alumno
{
char nombre[30];
char apellido[40];
char telefono[10];
} ALUMNO;


int main(){
int i;
ALUMNO clase[5];

for(i=0; i<2; i++){
printf("Alumno nº %d:\n", i+1);
printf("Nombre: ");
scanf("%29s", clase[i].nombre);
printf("Apellidos: ");
scanf("%39s",clase[i].apellido);
printf("Telefono: ");
scanf("%9s",clase[i].telefono);
}

getchar();
for(i=0; i<2; i++){
printf("\n\nAlumno nº %d:\n", i+1);
printf("Nombre: %s\n", clase[i].nombre);
printf("Apellidos: %s\n", clase[i].apellido);
printf("Telefono: %s\n", clase[i].telefono);
}
getchar();

return 0;
}
pero tiene un problema si en nombre escribes juan perez, juan queda como nombre y perez como apellido.
Tal vez deberias pedir los 2 apellidos o leer letra por letra sin scanf sino con getchar()
__________________
si tienes entre 18 y 20 años... entonces tienes 19 años xD

Última edición por Tikitios; 25/07/2010 a las 19:27

Etiquetas: estructura, puntero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:44.