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

Estructuras y funciones

Estas en el tema de Estructuras y funciones en el foro de C/C++ en Foros del Web. Necesito crear una estructura para estudiantes y funciones para ingresar alumnos y otra funcion para mostrar, el arreglo de la estructura debe ser segun el ...
  #1 (permalink)  
Antiguo 04/01/2015, 10:40
 
Fecha de Ingreso: enero-2015
Mensajes: 2
Antigüedad: 9 años, 11 meses
Puntos: 0
Estructuras y funciones

Necesito crear una estructura para estudiantes y funciones para ingresar alumnos y otra funcion para mostrar, el arreglo de la estructura debe ser segun el numero de estudiantes....
Este es mi codigo y tengo problemas para mostrar los datos NECESITO AYUDA URGENTE X FAVOR!!!!!

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct materias
{
char nom_materias[25];
int n[3];
float prom;

};

struct estudiante
{
char codigo[8];
char nombre[25];
char apellido[25];
char direccion[25];
int telefono[12];
int edad[3];


};
int ingresar_estudiantes(estudiante *A,materias *B);
void mostrar_estudiantes(estudiante *A,materias *B,int n);
int main()
{
estudiante iv;
materias jv;
int op,x=0,z=0;
int n=0,num;

do{
system("cls");
printf("\tPROGRAMA DE REGISTRO ESTUDIANTIL\n\n");
printf("Eliga una opcion del menu\n");
printf("1) Ingrese datos del estudiante: \n");
printf("2) mostrar datos del estudiante: \n");
printf("3) Buscar estudiante: \n");
printf("4) Salir \n");
printf("Ingrese una opcion: ");

scanf("%d",&op);


switch(op)
{
case 1:
z=ingresar_estudiantes(&iv,&jv);

break;

case 2:

mostrar_estudiantes(&iv,&jv,z);

break;

case 3:


break;

case 4:
printf("saliendo...\n");
break;
default:
printf("*****ERROR EN LA OPCION*****\n\n");

getch();

}
} while (op!=4);
}



int ingresar_estudiantes(estudiante *A,materias *B)
{
int op,x=0;
int n=0,num;
system("cls");


printf("INGRESE EL NUMERO DE ESTUDIANTES A REGISTRAR:");
scanf("%d",&n);
if (n<1)
{
printf("\nINGRESE AL MENOS 1 ESTUDIANTE");
printf("\nDESEA INTENTARLO DE NUEVO: S/N");
op=getch();
}





A=(estudiante*)malloc(sizeof(estudiante)*n);
for(int i=0;i<n;i++)
{
printf("Ingrese codigo del estudiante [%d]: ",i+1);
fflush(stdin);
scanf(" %[^\n]",A [i].codigo);


printf("Ingrese Nombres del estudiante [%d]: ",i+1);
fflush(stdin);
scanf(" %[^\n]",A [i].nombre);


printf("Ingrese apellidos del estudiante [%d]: ",i+1);
fflush(stdin);
scanf(" %[^\n]",A [i].apellido);

printf("Ingrese la direccion del estudiante [%d]: ",i+1);
scanf(" %[^\n]",A [i].direccion);

printf("Ingrese el telefono del estudiante [%d]: ",i+1);
scanf("%d",&A [i].telefono);


printf("Ingrese la edad del estudiante [%d]: ",i+1);
scanf("%d",&A [i].edad);


{
system("cls");
printf("\nINGRESE EL NUMERO DE MATERIAS A ESTUDIAR");
scanf("%d",&num);




printf("\nSOLO SE PUEDE ESTUDIAR DE 1 A 6 MATERIAS POR SEMESTRE");

system("pause");

} while(num<1||num>6);

B=(materias*)malloc(sizeof(materias)*num);
for(int y=0;y<num;y++)
{
printf("INGRESE LA MATERIA %d :",y+1);
fflush(stdin);
scanf("%s",B[i].nom_materias);
}
}
getch();

return n;

}

void mostrar_estudiantes(estudiante *A,materias *B,int n)
{
int x;
for(x=0;x<n;x++)
{
printf("EL CODIGO DEL ESTUIDANTE ES: %s",(A+x)->codigo);
printf("\nEL NOMBRE DEL ESTUIDANTE ES: %s",&(A+x)->nombre);
printf("\nEL APELLIDO DEL ESTUIDANTE ES: %s",&(A+x)->apellido);
printf("\nLA DIRECCION DEL ESTUIDANTE ES: %s",&(A+x)->direccion);
printf("\nEL TELEFONO DEL ESTUIDANTE ES: %d",*A[x].telefono);
printf("\nLA EDAD DEL ESTUIDANTE ES: %d",*A[x].edad);
system("pause");
}

}

Última edición por david17_619; 04/01/2015 a las 11:00 Razón: Nuevo codigo
  #2 (permalink)  
Antiguo 04/01/2015, 14:21
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Estructuras y funciones

use las etiquetas para identar el código. Te ayudara a que mas personas lo analicen.
Vas a Highlight y elijes el lenguaje. Luego pega tu código entre las etiquetas para que se vea bien.
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. struct materias {
  5.     char nom_materias[25];
  6.     int n[3];
  7.     float prom;
  8.    
  9. };
  10.  
  11. struct estudiante {
  12.     char codigo[8];
  13.     char nombre[25];
  14.     char apellido[25];
  15.     char direccion[25];
  16.     int telefono[12];
  17.     int edad[3];
  18.    
  19.    
  20. };
  21. int ingresar_estudiantes ( estudiante *A, materias *B );
  22. void mostrar_estudiantes ( estudiante *A, materias *B, int n );
  23. int main() {
  24.     estudiante iv;
  25.     materias jv;
  26.     int op, x = 0, z = 0;
  27.     int n = 0, num;
  28.    
  29.     do {
  30.         system ( "cls" );
  31.         printf ( "\tPROGRAMA DE REGISTRO ESTUDIANTIL\n\n" );
  32.         printf ( "Eliga una opcion del menu\n" );
  33.         printf ( "1) Ingrese datos del estudiante: \n" );
  34.         printf ( "2) mostrar datos del estudiante: \n" );
  35.         printf ( "3) Buscar estudiante: \n" );
  36.         printf ( "4) Salir \n" );
  37.         printf ( "Ingrese una opcion: " );
  38.        
  39.         scanf ( "%d", &op );
  40.        
  41.        
  42.         switch ( op ) {
  43.             case 1:
  44.                 z = ingresar_estudiantes ( &iv, &jv );
  45.                
  46.                 break;
  47.                
  48.             case 2:
  49.            
  50.                 mostrar_estudiantes ( &iv, &jv, z );
  51.                
  52.                 break;
  53.                
  54.             case 3:
  55.            
  56.            
  57.                 break;
  58.                
  59.             case 4:
  60.                 printf ( "saliendo...\n" );
  61.                 break;
  62.                
  63.             default:
  64.                 printf ( "*****ERROR EN LA OPCION*****\n\n" );
  65.                
  66.                 getch();
  67.                
  68.         }
  69.     } while ( op != 4 );
  70. }
  71.  
  72.  
  73.  
  74. int ingresar_estudiantes ( estudiante *A, materias *B ) {
  75.     int op, x = 0;
  76.     int n = 0, num;
  77.     system ( "cls" );
  78.    
  79.    
  80.     printf ( "INGRESE EL NUMERO DE ESTUDIANTES A REGISTRAR:" );
  81.     scanf ( "%d", &n );
  82.    
  83.     if ( n < 1 ) {
  84.         printf ( "\nINGRESE AL MENOS 1 ESTUDIANTE" );
  85.         printf ( "\nDESEA INTENTARLO DE NUEVO: S/N" );
  86.         op = getch();
  87.     }
  88.    
  89.    
  90.    
  91.    
  92.    
  93.     A = ( estudiante * ) malloc ( sizeof ( estudiante ) * n );
  94.    
  95.     for ( int i = 0; i < n; i++ ) {
  96.         printf ( "Ingrese codigo del estudiante [%d]: ", i + 1 );
  97.         fflush ( stdin );
  98.         scanf ( " %[^\n]", A [i].codigo );
  99.        
  100.        
  101.         printf ( "Ingrese Nombres del estudiante [%d]: ", i + 1 );
  102.         fflush ( stdin );
  103.         scanf ( " %[^\n]", A [i].nombre );
  104.        
  105.        
  106.         printf ( "Ingrese apellidos del estudiante [%d]: ", i + 1 );
  107.         fflush ( stdin );
  108.         scanf ( " %[^\n]", A [i].apellido );
  109.        
  110.         printf ( "Ingrese la direccion del estudiante [%d]: ", i + 1 );
  111.         scanf ( " %[^\n]", A [i].direccion );
  112.        
  113.         printf ( "Ingrese el telefono del estudiante [%d]: ", i + 1 );
  114.         scanf ( "%d", &A [i].telefono );
  115.        
  116.        
  117.         printf ( "Ingrese la edad del estudiante [%d]: ", i + 1 );
  118.         scanf ( "%d", &A [i].edad );
  119.        
  120.        
  121.         {
  122.             system ( "cls" );
  123.             printf ( "\nINGRESE EL NUMERO DE MATERIAS A ESTUDIAR" );
  124.             scanf ( "%d", &num );
  125.            
  126.            
  127.            
  128.            
  129.             printf ( "\nSOLO SE PUEDE ESTUDIAR DE 1 A 6 MATERIAS POR SEMESTRE" );
  130.            
  131.             system ( "pause" );
  132.            
  133.         } while ( num < 1 || num > 6 );
  134.        
  135.         B = ( materias * ) malloc ( sizeof ( materias ) * num );
  136.        
  137.         for ( int y = 0; y < num; y++ ) {
  138.             printf ( "INGRESE LA MATERIA %d :", y + 1 );
  139.             fflush ( stdin );
  140.             scanf ( "%s", B[i].nom_materias );
  141.         }
  142.     }
  143.    
  144.     getch();
  145.    
  146.     return n;
  147.    
  148. }
  149.  
  150. void mostrar_estudiantes ( estudiante *A, materias *B, int n ) {
  151.     int x;
  152.    
  153.     for ( x = 0; x < n; x++ ) {
  154.         printf ( "EL CODIGO DEL ESTUIDANTE ES: %s", ( A + x )->codigo );
  155.         printf ( "\nEL NOMBRE DEL ESTUIDANTE ES: %s", & ( A + x )->nombre );
  156.         printf ( "\nEL APELLIDO DEL ESTUIDANTE ES: %s", & ( A + x )->apellido );
  157.         printf ( "\nLA DIRECCION DEL ESTUIDANTE ES: %s", & ( A + x )->direccion );
  158.         printf ( "\nEL TELEFONO DEL ESTUIDANTE ES: %d", *A[x].telefono );
  159.         printf ( "\nLA EDAD DEL ESTUIDANTE ES: %d", *A[x].edad );
  160.         system ( "pause" );
  161.     }
  162.    
  163. }
  #3 (permalink)  
Antiguo 04/01/2015, 15:02
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 2 meses
Puntos: 38
Respuesta: Estructuras y funciones

vale vamos a ver ...
tienes unos cuantos errores y chungos, preste atencion.

se crea una estructura asi:
Código C:
Ver original
  1. struct Estructura{
  2. //aqui mis cosas
  3. };
...¿no?

pues bien... CUando vas a crear una variable(tambien llamado objeto) lo hacemos asi:

int main(){

struct Estructura miEstructura

}

y no asi: Estructura miEstructura

Para poder hacer Estructura miEstructura debes hacer el typedef que se traduce en hacer una nueva definición de tipo, con esto nos ahoramos poner el struct delante de las variables que criamos.

Entonces tienes 2 caminos. Uno es ir en todos los lugares donde hayas creado una estructura y poner struct delante de todo lo que este asi: Estructura miEstructura a modo que quede asi struct Estructura miEstructura.

La otra forma es hacer el typedef que se hace cambiando tus estructuras por estas :

Código C:
Ver original
  1. typedef struct{
  2.     char nom_materias[25];
  3.     int n[3];
  4.     float prom;
  5.    
  6. }materias;
  7.  
  8. typedef struct  {
  9.     char codigo[8];
  10.     char nombre[25];
  11.     char apellido[25];
  12.     char direccion[25];
  13.     int telefono[12];
  14.     int edad[3];
  15. }estudiante;

El otro error es que en funciones como :
int ingresar_estudiantes ( estudiante *A, materias *B )
...creas 2 punteros entre los (), luego sigues tratando como si de estructuras normales fuera, pero SON PUNTEROS.

Aqui la prueba: scanf ( " %[^\n]", A[i].codigo );

A no es un un arreglo por que le pones el [] ?? te falla la teoría.

suponiendo que haces el typedef anteriormente mencionado.

si quieres hacer un arreglo de estructuras se hace asi:
estudianteA[100] y luego se accede como has echo, A[numeroDel estudiante].codigo, pero no veo ninguna declaración de arreglos de estudiantes para que uses eso: A[i].codigo.

es mas... en todo el programa solo has creado un solo juego de variables del tipo estudiante y materias, esta al principio de main.

ademas para acceder a un objeto apuntado por un puntero debes poner el operador de indirección antes a modo que si tienes:
//puntero a estudiante
estudiantes * pEstudiante;
estudiante unEstudiante;

pEstudiante = &unEstudiante;

luego accedes como:

*pEstudiante.codigo = 10; //10 es un ejemplo, ni se si es int XD

Para crear un arreglo de estructuras estudiante seria:
estudiante unEstudiante[10];

luego entonces ya lo accedes por el indice ([]) a cada estudiante. Algo asi:
unEstudiante[0].codigo = 10;


Debes reforzar muchos conceptos por que tienes carencias. Y son muchas para hablar en pocas lineas.

Intente arreglar y si ves que no puedes vuelves a preguntar.
has el typedef y con eso ya el programa arranca. Luego ya puedes ir apañando esos A[i].codigo y cosas asi.

suerte

Etiquetas: char, estructuras, funcion, funciones, int, numero, programa
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 03:41.