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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] - Duda estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C] - Duda estructuras  (Leído 7,181 veces)
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
[C] - Duda estructuras
« en: 20 Mayo 2010, 23:32 pm »

¿Cuál es el método utilizado en C para el ingreso de una estructura de datos? Me refiero a que si se deben leer las variables de la estructura por apartey luego asignarlas a los miembros de la esctructura... o bien, si se deben asignar directamente a cada miembro de la esctructura luego de un scanf().


En línea

nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: [C] - Duda estructuras
« Respuesta #1 en: 20 Mayo 2010, 23:37 pm »

no entiendo bien la pregunta pero bueno te pongo un ejemplo de uso de estrocturas en c que tenía por ahí tirado

Código
  1. #include <stdio.h>
  2.  
  3.  
  4. struct Ficha {
  5.  
  6. char Nombre[80];
  7. int  Num_unidades;
  8. int Precio_unidad;
  9. int Estado;   // 0 = moroso; 1 = atrasado; 2 = pagado
  10. };
  11.  
  12.  
  13. typedef struct Ficha Fichas;
  14.  
  15.  
  16. int main(int argc, char** argv)
  17. {
  18. Fichas Cliente[100];
  19. int i;
  20. char nombre[80];
  21.  
  22. for (i = 0; i < 99; i++)
  23. {
  24. if (nombre == Cliente[i].Nombre)
  25. {
  26. printf ("%s", Cliente[i].Nombre);
  27. printf ("%i", Cliente[i].Num_unidades);
  28. printf ("%i", Cliente[i].Precio_unidad);
  29. switch  (Cliente[i].Estado)
  30. {
  31. case 0 : printf ("Moroso");
  32.  break;
  33. case 1 : printf ("Atrasado");
  34.  break;
  35. case 2 : printf ("Pagado");
  36.  break;
  37. };
  38.    }
  39. }
  40.  
  41.  
  42. return 0;
  43. }
  44.  
  45.  
  46.  
  47.  
  48.  








Saludos!!


« Última modificación: 20 Mayo 2010, 23:39 pm por nicolasblues86 » En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #2 en: 20 Mayo 2010, 23:46 pm »

Me refiero a las asignaciones:

Código
  1. //Suponemos la esctructura
  2. struct Ficha {
  3.  
  4. char Nombre[80];
  5. int  Num_unidades;
  6. int Precio_unidad;
  7. int Estado;   // 0 = moroso; 1 = atrasado; 2 = pagado
  8. };
  9. ...
  10. //Es esta la forma de asignacion?
  11. int num, int pre;
  12. Ficha F;
  13. scanf("%d",&num);
  14. scanf("%d",&pre);
  15. F.Num_Unidades = num;
  16. F.Precio_Unidad = pre;
  17. ...
  18. /* O lo correcto seria que en el scanf haga una asignación directa?*/
  19.  
En línea

nicolasblues86

Desconectado Desconectado

Mensajes: 38



Ver Perfil
Re: [C] - Duda estructuras
« Respuesta #3 en: 20 Mayo 2010, 23:54 pm »

seee.. lo podes hacer tanto así como directamente en el scanf


Código
  1.  
  2. scanf ("%d" &f.numero);
  3.  
  4.  

o si nosotros pasamos por referencia el struct se haria

Código
  1.  
  2. void ejemplo ( struct nom_del_struct *p )
  3.  
  4. scanf ("%d" &p->numero);
  5.  
  6.  

osea se utilaza  "->" en vez de de "."

saludos!!
En línea

Solamente hay 10 clases de personas en el mundo los que saben leer binario y los que no
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: [C] - Duda estructuras
« Respuesta #4 en: 20 Mayo 2010, 23:55 pm »

Weno como no son clases... ni POO lo puedes hacer directamente... pero en la POO no es recomendable... Tu sabes para que no aya acceso directo con los miembros privados...

Saludos...

EDITO: aya xD!! va con 'h'... sorry
« Última modificación: 20 Mayo 2010, 23:59 pm por El_nuevo_HH » En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #5 en: 21 Mayo 2010, 00:06 am »

Exacto a eso último me refería.

OFFTOPIC : Para que no hallan creo que es lo correcto  :xD
En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #6 en: 21 Mayo 2010, 02:01 am »

Para acceder o asignar a una variable normal dentro de una estructura:
Código
  1. estructura.elemento;
  2.  

Para acceder o asignar a un puntero, dentro de una estructura:

Código
  1. estructura->puntero;


También te recomiendo declarar las estructuras como typedef:

Código
  1. typedef struct Nodo
  2. {
  3.     elementos...
  4. };
  5.  
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #7 en: 21 Mayo 2010, 03:19 am »

Gracias por la aclaración, pero no me refería a eso.
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #8 en: 21 Mayo 2010, 17:03 pm »

Miren el siguiente code:

Código
  1. #include <stdlib.h>
  2. #include <string.h>
  3.  
  4. #define MAX_LIMIT 50
  5.  
  6. struct Persona{
  7.  char *nom, *dom, *tel;
  8.  int edad;  
  9. };
  10.  
  11. typedef struct Persona stPersona;
  12.  
  13. void _ingreso(stPersona *);
  14. void _imprimir(stPersona *);
  15.  
  16. int main()
  17. {
  18.  stPersona *User;
  19.  //Aqui creo que deberia reservar el espacio para User
  20.  _ingreso(User);
  21.  _imprimir(User);
  22.  
  23.  return 0;
  24. }
  25.  
  26. void _ingreso(stPersona *stP)
  27. {
  28.  char *nom;
  29.  nom = (char *)(malloc((MAX_LIMIT)*sizeof(char)));
  30.  stP = (stPersona *)(malloc(sizeof(stPersona)));
  31.  stP->nom = (char *)(malloc((MAX_LIMIT)*sizeof(char)));
  32.  fgets(nom,MAX_LIMIT,stdin);
  33.  strcpy(stP->nom,nom);
  34. }
  35.  
  36. void _imprimir(stPersona *stP)
  37. {
  38.  puts("------SALIDA------");
  39.  puts(stP->nom);
  40. }

¿Por qué se produce un error de segmentación en la salida?

EDITADO : Si reservo espacio para User, y luego utilizo printf("%s") la salida es (null).
« Última modificación: 21 Mayo 2010, 17:09 pm por dr.~ » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [C] - Duda estructuras
« Respuesta #9 en: 21 Mayo 2010, 18:33 pm »

Es que reservas memoria utilizando el puntero stP pero dicho puntero deja de existir cuando termina el contexto de la función. User no apunta al contenido adecuado cuando se lo pasas a _imprimir y ademas cuando sales de _ingresar pierdes la referencia para liberar la memoria que reservaste.

Saludos.

PD: Necesitas incluir stdio.h para stdin.
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda programa con estructuras de control « 1 2 »
Programación C/C++
jamatbar 14 7,394 Último mensaje 11 Noviembre 2011, 12:05 pm
por jamatbar
duda sobre estructuras y funciones
Programación C/C++
asdavid 3 2,809 Último mensaje 29 Noviembre 2012, 00:01 am
por durasno
[Duda] Estructuras « 1 2 »
ASM
xv0 15 9,225 Último mensaje 12 Febrero 2013, 10:18 am
por fary
Duda con estructuras
Dudas Generales
fins94 1 2,140 Último mensaje 4 Junio 2013, 18:55 pm
por ivancea96
Duda lista con estructuras c++
Programación C/C++
d00ze13 3 2,214 Último mensaje 19 Diciembre 2013, 15:34 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines