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)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Calificaciones en C - Error al mostrar. en: 8 Diciembre 2016, 02:50 am
Sucede que a la hora de llamar mostrar, y buscar (relativamente lo mismo), se me crashea.
Por lo visto tiene que ver con calificación, o no tengo ni idea, ¿Qué puede estar sucediendo?.
Sin contenido en las estructuras (usar la opción mostrar sin antes meter algo), funciona, de igual forma buscar, pero el problema es cuando relleno; Ya no me deja usarlas, crashea.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6. typedef struct materia{
  7.    char nombre[100];
  8.    float cal;
  9. }materia;
  10. typedef struct alumno{
  11.    char apellidoP[15];
  12.    char apellidoM[15];
  13.    char nombre[30];
  14.    materia mat[50];
  15.    int nua;
  16.    char carrera[30];
  17.    struct alumno *s;
  18. }alumno;
  19. void buscar(alumno *p1){
  20.    int op, i=1, nua, nm=0;
  21.    float prom=0;
  22.    printf("\nIngresa el NUA a buscar: ");
  23.    scanf("%d", &nua);
  24.    printf("\n\nNombre\t\t\tNUA\tCalificacion\tCarrera\n");
  25.            while(p1!=NULL)
  26.            {
  27.  
  28.                if(nua==p1->nua)
  29.                {
  30.                    printf("%d. %s %s %s %d, %f, %s\t\n", i++, p1->nombre, p1->apellidoP, p1->apellidoM, p1->nua, p1->mat[nm].cal, p1->carrera);
  31.                }
  32.                p1=p1->s;
  33.            }
  34.            if(i==1)
  35.            {
  36.                printf("No se encontraron resultados.\n");
  37.            }
  38. }
  39. int tamanio(alumno *lt){
  40.    if(lt==NULL)
  41.        return 0;
  42.    else
  43.        return tamanio(lt->s)+1;
  44. }
  45. alumno *ingresar(alumno *p1){
  46.    int op, P, nm=0, Q=0;
  47.    float Cal, prom, Con=0;
  48.    {
  49.        int ch;
  50.  
  51.        while ((ch = getchar()) != EOF && ch != '\n')
  52.            ;
  53.    }
  54.    alumno *A, *aux;
  55.    A=(alumno*)malloc(sizeof(alumno));
  56.    printf("Nombre: ");
  57.    gets(A->nombre);
  58.    printf("Apellido paterno: ");
  59.    scanf("%s", A->apellidoP);
  60.    printf("Apellido materno: ");
  61.    scanf("%s", A->apellidoM);
  62.    printf("NUA: ");
  63.    scanf("%d", &(A->nua));
  64.    printf("Carrera: ");
  65.    {
  66.        int ch;
  67.  
  68.        while ((ch = getchar()) != EOF && ch != '\n')
  69.            ;
  70.    }
  71.    gets(A->carrera);
  72.    A->s=NULL;
  73.    if(p1==NULL)
  74.        p1=A;
  75.    else
  76.    {
  77.        aux=p1;
  78.        while(aux->s!=NULL)
  79.            aux=aux->s;
  80.        aux->s=A;
  81.    }
  82.    printf("\nDesea ingresar materias?\n1. Si\n2. No\nOpcion: ");
  83.    scanf("%d", &op);
  84.    switch(op)
  85.    {
  86.        case 1:
  87.            while(op!=2)
  88.            {
  89.                printf("\nIngrese el nombre de la materia: ");
  90.                scanf("%s", p1->mat[nm].nombre);
  91.                printf("\nIngrese calificacion de la materia: ");
  92.                scanf("%f", &(A->mat[nm].cal));
  93.                printf("\nDesea agregar otra materia?\n1. Si\n2. No\nOpcion: ");
  94.                scanf("%d", &op);
  95.                if(op==1)
  96.                {
  97.                    nm++;
  98.                }
  99.            }
  100.            for( op=0;op<=nm;op++){
  101.                printf("\n%s. Y la calificación ingresada es:", p1->mat[op].nombre);
  102.                printf("%f\n",p1->mat[op].cal);
  103.            }
  104.    break;
  105.        case 2 :
  106.            break;
  107.  
  108.  
  109.    return p1;
  110. }
  111. }
  112. void mostrar(alumno *p1){
  113.    int i=1;
  114.    printf("\n\nNombre\t\t\tNUA\tCalificacion\tCarrera\n");
  115.    while(p1!=NULL)
  116.    {
  117.        printf("%d. %s %s %s %d, %s\t\n", i++, p1->nombre, p1->apellidoP, p1->apellidoM, p1->nua, p1->carrera);
  118.        p1=p1->s;
  119.    }
  120. }
  121. int main(){
  122.    alumno *p1=NULL;
  123.    int op;
  124.    do{
  125.        printf("MENU:\n");
  126.        printf("1. Ingresar un alumno.\n");
  127.        printf("2. Mostrar alumnos.\n");
  128.        printf("3. Buscar.\n");
  129.        printf("Opcion: ");
  130.        scanf("%d", &op);
  131.        switch(op)
  132.        {
  133.            case 1:
  134.                p1=ingresar(p1);
  135.                break;
  136.            case 2:
  137.                mostrar(p1);
  138.                break;
  139.            case 3:
  140.                buscar(p1);
  141.                break;
  142.            default:
  143.                printf("Opcion no valida.\n");
  144.        }
  145.    }while(op!=8);
  146.  
  147.    return 0;
  148.  
  149. }
  150.  
Gracias de antemano.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines