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

 

 


Tema destacado:


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

Desconectado Desconectado

Mensajes: 41


Ver Perfil
ACLARACION EN ACCESO A STRUCT
« en: 10 Octubre 2012, 17:42 pm »

Este programa no esta terminado solo quiero que me aclaren si al acceder a cada struct en este caso seccion1, seccion2, seccion3, debo declarar un puntero por cada struct o puedo utilizar un puntero general supongamos *pt?

struct { struct seccion1;
         struct seccion2;
         struct seccion3;
         } secciones, *p1=&secciones,*p2=secciones,*p3=secciones;
         
struct { char asignatura1;
         char asignatura2;
         char asignatura3;
         char asignatura4;
         char asignatura5;
         } seccion1,seccion2,seccion3,

main(){
       
       struct *p1,*p2,*p3,*cat;
       int opc,n;
       
       p1=(secciones*)malloc(sizeof(secciones));
       p2=(secciones*)malloc(sizeof(secciones));
       p3=(secciones*)malloc(sizeof(secciones));
     
int menu(){
       cout<<"\n MENU \n";
       cout<<"1..Ingreso sección 1 (5 materias)\n";
       cout<<"2..Ingreso sección 2 (4 materias)\n";
       cout<<"3..Ingreso sección 3 (2 materias)\n";
       cout<<"4..Volver al menu \n";
       cout<<"5..salir\n";
       cin>>opc;
       return(opc);
       }
       
       switch (menu()):
       case 1:
       ingreso(p1->secciones.seccion1,&n=5);
       break;
       case 2:
       ingreso(p2->secciones.seccion2,&n=4);
       break;
       case 3:
       ingreso(p3->secciones.seccion3,&n=2);
       break;
       case 4:
       menu();
       break;
       default:
       break;
       }
       
void ingreso(struct p1->secciones.seccion1,int *cat){

if(*cat>0){
cout<<"\n Ingrese asignatura 1: "; cin>>p1->secciones.seccion1.asignatura1;
cout<<"\n Ingrese asignatura 2: "; cin>>p1->secciones.seccion1.asignatura2;

if(*cat<=2){
cout<<"\n Ingrese asignatura 3: "; cin>>p1->secciones.seccion2.asignatura3;
cout<<"\n Ingrese asignatura 4: "; cin>>p1->secciones.seccion2.asignatura4;
}
if(*cat<=5){
cout<<"\n Ingrese asignatura 5: "; cin>>p1->secciones.seccion1.asignatura5;
}
}



En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: ACLARACION EN ACCESO A STRUCT
« Respuesta #1 en: 10 Octubre 2012, 17:57 pm »

Hola Mari2012 , no, no tienes porqué declarar un puntero por cada struct , accedes directamente con el operador '.' sin las comillas y un apunte las estructuras seccion1 , sección2 y seccion3 tienes que declararlas antes de la estructura secciones ya que las utiliza.

Otra aclaración , las funciones no se declaran dentro de las llaves del main normalmente, es decir :
Código
  1. #include <iostream>
  2. //Declaramos las funciones
  3. int ejemplo_funcion1 ();
  4. int ejemplo_funcion2 ();
  5. int ejemplo_funcion3 ();
  6. int main()
  7.  {
  8.  
  9.  }//Fin del main.
  10.  //Definimos las funciones
  11. int ejemplo_funcion1 ()
  12.  {
  13.    return 0;
  14.  }
  15. int ejemplo_funcion2 ()
  16.  {
  17.    return 0;
  18.  }
  19. int ejemplo_funcion3 ()
  20.  {
  21.  return 0;
  22.  }
  23.  

PD : No escribas en mayúsculas, dá mala impresión antes de leer el mensaje, por lo menos a mí , y cuando vayas a postear un código , lo seleccionas y te vas donde pone GeSHi , abres el menú desplegable y seleccionas el lenguaje que sea para que se vea coloreado como el de arriba.

¡Un saludo!  ;D


« Última modificación: 10 Octubre 2012, 18:01 pm por avesudra » En línea

Regístrate en
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: ACLARACION EN ACCESO A STRUCT
« Respuesta #2 en: 10 Octubre 2012, 20:45 pm »

Gracias avesudra, tenia en cuenta que faltaba los prototipos de funciones, el codigo no lo he terminado, tambien para la proxima omitire las mayusculas, la mayoria no lo utiliza, ahora tengo una nueva duda en la linea 20, el compilador indica :
 variable or field `ingreso' declared void

Código
  1. #include<stdio.h>            
  2. #include<stdlib.h>
  3. #include<iostream>
  4. using namespace std;
  5.  
  6.  
  7. struct { char asignatura1;
  8.         char asignatura2;
  9.         char asignatura3;
  10.         char asignatura4;
  11.         char asignatura5;
  12.         } seccion1,seccion2,seccion3;
  13.  
  14.         struct { struct seccion1;
  15.                  struct seccion2;
  16.                  struct seccion3;
  17.                  } secciones, *pt=&secciones;
  18.  
  19. int menu(int opc);
  20. void ingreso(struct *,int *);
  21.  
  22. main(){
  23.  
  24.       struct *pt;
  25.       int opc,n,*cat;
  26.  
  27.  
  28.       pt=(secciones*)malloc(sizeof(secciones));
  29.  
  30.       switch (menu(opc)){
  31.       case 1:
  32.       ingreso(pt->secciones.seccion1,&n=5);
  33.       break;
  34.       case 2:
  35.       ingreso(pt->secciones.seccion2,&n=4);
  36.       break;
  37.       case 3:
  38.       ingreso(pt->secciones.seccion3,&n=2);
  39.       break;
  40.       case 4:
  41.       break;
  42.       default:
  43.       cout<<"\n OPCION INVALIDA";
  44.       break;
  45.       }
  46.  
  47.       system("pause");
  48.       }
  49.  
  50.       int menu(int opc){
  51.       cout<<"\n MENU \n";
  52.       cout<<"1..Ingreso sección 1 (5 materias)\n";
  53.       cout<<"2..Ingreso sección 2 (4 materias)\n";
  54.       cout<<"3..Ingreso sección 3 (2 materias)\n";
  55.       cout<<"4..salir\n";
  56.       cin>>opc;
  57.       return(opc);
  58.       }
  59.  
  60. void ingreso(struct pt->secciones.seccion1,int *cat){
  61. do{
  62. if(*cat>0){
  63. cout<<"\n Ingrese asignatura 1: "; cin>>pt->secciones.seccion1.asignatura1;
  64. cout<<"\n Ingrese asignatura 2: "; cin>>pt->secciones.seccion1.asignatura2;
  65. }
  66. if(*cat>2){
  67. cout<<"\n Ingrese asignatura 3: "; cin>>pt->secciones.seccion2.asignatura3;
  68. cout<<"\n Ingrese asignatura 4: "; cin>>pt->secciones.seccion2.asignatura4;
  69. }
  70. if((*cat>4)&&(*cat<=5)){
  71. cout<<"\n Ingrese asignatura 5: "; cin>>pt->secciones.seccion1.asignatura5;
  72. }
  73. }while(*cat<=5);
  74. }
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: ACLARACION EN ACCESO A STRUCT
« Respuesta #3 en: 10 Octubre 2012, 22:25 pm »

Mmmm pues es porque no indicas cual es la estructura a pasar es decir , tu para poner un puntero a una estructura tienes que poner cual es la estructura:
Código
  1. void ingreso(struct tipo * , int *);
Aunque en tu código veo innecesario el paso de la estructura pues después siempre asignas el mismo campo, no sé si notas que la estructura secciones es global.
Otra cosa a corregir , en C:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
En C++ :
Código
  1. #include <cstdio>
  2. #include <cstdlib>
Tienes un poco de lio con los punteros y las estructuras.Para declarar una estructura puedes hacer esto:
Código
  1. struct base_de_datos
  2. {
  3. char nombre[100];
  4. char apellidos[100];
  5. int edad;
  6. };
  7. int main()
  8. {
  9. //y ahora declaras una variable de tipo base_de_datos así:
  10. base_de_datos listacompleta1;
  11. }
Si lo hacemos como tu haces tenemos:
Código
  1. struct
  2. {
  3. char nombre[100];
  4. char apellidos[100];
  5. int edad;
  6. }base_de_datos;//VARIABLE O ESTRUCTURA GLOBAL!!!!
  7. int main()
  8. {
  9. //ya no puedes declarar una estructura igual a base_de_datos
  10. //pero base_de_datos es una estructura
  11. }

Yo que tú le pegaba un buen repaso a las estructuras , haría algo con ellas un poco complejo y después pasas al manejo de punteros con ellas , si no te puedes volver loco/a.
« Última modificación: 10 Octubre 2012, 22:33 pm por avesudra » En línea

Regístrate en
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: ACLARACION EN ACCESO A STRUCT
« Respuesta #4 en: 11 Octubre 2012, 17:18 pm »

Si tendre que reforzar la base, ahora estoy probando otra manera de manipular los punteros en este caso, si tengo:

Código
  1. struct{ int linea1;
  2.           int linea2;
  3.           int linea3;
  4.           int linea4;
  5.           int linea5;
  6.          }turno1,turno2,turno3,*pt;


 
Código
  1. pt=&turno1;
  2. pt=&turno2;
  3. pt=&turno3;

Es decir:

Código
  1. struct{ int miembro1;
  2.          int miembro2;
  3.          int miembro n;
  4.         }variable1, variable2, variable n,*pt;
  5.  
  6. Es necesario asignarle la direccion de cada variable a pt ?
  7.  
  8. pt=&variable1;
  9. pt=&variable2;
  10. pt=&variable n;

 ;D



En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: ACLARACION EN ACCESO A STRUCT
« Respuesta #5 en: 11 Octubre 2012, 21:25 pm »

Pero es que no tienes nada claro porque date cuenta que ahí en ese pedazo de código , el puntero pt termina apuntando SOLO a variable n , que por cierto un nombre de una variable no puede llevar espacios. Y no hace falta asignarle un puntero a una variable global , que ya es accesible en todo el programa.
En línea

Regístrate en
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una aclaración
Diseño Gráfico
noob_Setup 2 1,868 Último mensaje 7 Diciembre 2005, 15:09 pm
por noob_Setup
Aclaracion
Juegos y Consolas
unliketec 3 2,661 Último mensaje 25 Noviembre 2009, 14:32 pm
por Ariath
[SOLUCIONADO]¿Como printear un valor de un struct dentro de otro struct?
Programación C/C++
Firos 0 5,190 Último mensaje 24 Marzo 2011, 13:47 pm
por Firos
Aclaracion o explicacion
Programación C/C++
Guillito 0 2,054 Último mensaje 31 Agosto 2021, 16:19 pm
por Guillito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines