elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Array de estructura (struct) typedef y punteros[C].
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Array de estructura (struct) typedef y punteros[C].  (Leído 11,590 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Array de estructura (struct) typedef y punteros[C].
« en: 7 Febrero 2015, 22:11 pm »

Hola a todos.
Estoy estudiando estructuras y voy a programar una agenda, al programa le falta todo pero no quiero seguir sin aprender las dos cosas por las que doy de alta este post.-
La primera como puedo insertar typedef y la otra, como hago para declarar la estructura para que se le pueda ingresar de o a 10 contactos (unaAgenda [10]).-
Espero se entienda, estimo que si.-

Código
  1. #include <stdio.h>
  2.  
  3. struct agenda{
  4. int orden, celular;
  5. char nombre[30], apellido[30], calle[30], ciudad[30], correo[50];
  6. };
  7.  
  8. int main(void){
  9. struct agenda unaAgenda;
  10. struct agenda *ptrAgenda;
  11. ptrAgenda = &unaAgenda;
  12.  
  13. (*ptrAgenda).orden = 1;
  14.  
  15. printf("\n\n %d", (*ptrAgenda).orden);
  16.  
  17. return 0;
  18. }

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #1 en: 8 Febrero 2015, 00:29 am »

Tal vez tu estructura "agenda" debiera ser más bien "contacto", y luego hacer una array de contactos.


En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #2 en: 8 Febrero 2015, 14:47 pm »

Hola ivancea96.
Gracias por ocuparte y por el consejo, voy a dejar por el momento lo de typedef, con respecto a la otra duda pude avanzar un poco, solo que me da el siguiente error (expongo a continuación) que por más que modifico el programa no logro solucionar.-

Código
  1. #include <stdio.h>
  2.  
  3. struct agenda{
  4. int orden, celular;
  5. char nombre[30], apellido[30], calle[30], ciudad[30], correo[50];
  6. }contacto[10];
  7.  
  8. int main(void){
  9. struct agenda *ptrContacto;
  10. ptrContacto = &contacto[0];
  11.  
  12. (*ptrContacto+3).orden = 3;
  13.  
  14. //printf("\n\n %d", (*ptrContacto).orden);
  15.  
  16. return 0;
  17. }

C:\ProgramasNotepad\Pruebas.c: In function 'main':
C:\ProgramasNotepad\Pruebas.c:12:15: error: invalid operands to binary + (have 'struct agenda' and 'int')
  (*ptrContacto+3).orden = 3;


Espero puedas ayudarme.-

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #3 en: 8 Febrero 2015, 15:33 pm »

Es necesario cambiar

Código
  1. (*ptrcontact+3).order = 3;

a

Código
  1. ptrcontact[3].order = 3;

O poniendo los paretesís necesarios al usar arítmetica de punteros

Código
  1. (*(ptrcontact+3)).order = 3;

También usando el operador ->

Código
  1. (ptrcontact + 3)->order = 3;

De lo contrario, de acuerdo con la regla de prioridad  * tiene mayor precedencia sobre + provocando el error en tu caso.

Un Saludo

En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #4 en: 8 Febrero 2015, 15:54 pm »

Hola Blaster.
Muchas gracias, funciona a la perfección, el tema estaba en utilizar correctamente la aritmética de punteros.-

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #5 en: 9 Febrero 2015, 15:44 pm »

Hola gente.
Una vez más acudo a Uds. Para ver si me dan una mano con este nuevo inconveniente.-
La línea que figura como comentario me da error, estuve consultando en internet y no logro dar con la solución-

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct{
  4. int orden, celular;
  5. char nombre[30], apellido[30], calle[30], ciudad[30], correo[50];
  6. }agenda[10];
  7.  
  8. void ingreso(agenda *ptrContactos);
  9.  
  10. int main(void){
  11. agenda contactos;
  12. ingreso(&contactos);
  13.  
  14.  
  15. return 0;
  16. }
  17.  
  18. void ingreso(agenda *ptrContactos){
  19. (*ptrContactos + 3)->orden = 5;
  20.    //(*(ptrContactos)).orden = 5;
  21.  
  22. printf("\n\n %d", (*ptrContactos + 3)->orden);
  23. }


Citar
C:\ProgramasNotepad\Pruebas.c: In function 'ingreso':
C:\ProgramasNotepad\Pruebas.c:21:22: error: request for member 'orden' in something not a structure or union
     (*(ptrContactos)).orden = 3;

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #6 en: 9 Febrero 2015, 15:58 pm »

Código
  1. typedef struct{ /* ... */ }agenda[10];
  2.  
  3. void ingreso(agenda *ptrContactos)

ptrContactos es un puntero de tipo "agenda" que a su vez es un arreglo de diez elementos... luego ptrContactos es un puntero doble. Entonces:

ptrContactos: puntero doble
*ptrContacots: puntero (necesitas el operador '->' en vez del operador '.' )
**ptrContactos: acceso directo a la estructura (necesitas el operador '.' )

Un saludo
« Última modificación: 9 Febrero 2015, 16:31 pm por eferion » En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #7 en: 9 Febrero 2015, 16:51 pm »

No sería mas lógico tener algo como esto?

Código
  1.  
  2. typedef struct contacto{
  3. int orden, celular;
  4. char nombre[30], apellido[30], calle[30], ciudad[30], correo[50];
  5. };
  6.  
  7.  
  8. int main(int argc, char *argv[]) {
  9.  
  10.    contacto* miagenda;
  11.    miagenda = (contacto*) malloc(10 * sizeof(contacto));
  12.    miagenda[0].orden = 0;
  13.    strcpy(miagenda[0].nombre, "Nombre");
  14.    strcpy(miagenda[0].apellido, "Apellido");
  15.  

Y no hace falta  el "->" porque [] haria la indireccion.
Se podria hacer
Código
  1. //miagenda[0].apellido;
  2. (miagenda +0)->apellido;
  3.  
Pero vale la pena  complicar la sintaxis?


Saludos
« Última modificación: 9 Febrero 2015, 16:57 pm por _Enko » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #8 en: 9 Febrero 2015, 17:06 pm »

Pero vale la pena  complicar la sintaxis?

Desde mi punto de vista no merece la pena.

El código tiene que ser lo más sencillo y legible posible para reducir los costes de mantenimiento, el número de errores, y el coste de ampliar el programa... pero la decisión final no depende de nosotros :)
En línea

DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de estructura (struct) typedef y punteros[C].
« Respuesta #9 en: 9 Febrero 2015, 18:43 pm »

Hola a todos.
Eferion,  me parece muy interesante lo de puntero doble, etc. Yo creí que sabía bastante sobre punteros pero veo que tengo que repasarlos, si estaríamos sentados los dos frente a la misma compu te efectuaría una pregunta, pero no es este el caso, seguramente consultando en la web voy a obtener la respuesta a mi duda.-
_Enko, 2 aclaraciones en cuanto a tu código, la primera es que todavía no llegue a estudiar memoria dinámica y la restante es que el programa se va a extender bastante porque al pedir el ingreso de los datos voy a validar que sean correctos, por lo tanto tengo que utilizar funciones, no debo hacerlo todo dentro de la función principal (main).-
En cuanto a:

Citar
Pero vale la pena  complicar la sintaxis?
…………………………………….
…………………………………….
Desde mi punto de vista no merece la pena.
Les aclaro mi punto de vista y el criterio del porqué, yo no puedo estar seguro de hacer sólo programas para terceros, que pasa si me trajeran para corregir o modificar programas hechos por otros, en estos casos puedo encontrarme con una gran diversidad de formas de programar y según me dicta mi sentido común debo tener el mayor conocimiento posible, este es el único motivo por el cual este programa(o todos) los hago un tanto complicado.-

Para finalizar, espero alguna respuesta en cuanto a mi planteo para saber cuál es el criterio utilizados por Uds. Al estudiar.

Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines