Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Busquedas lineales en C

batiguason_11

Bovino adicto
Desde
27 Jun 2009
Mensajes
703
Veran tengo mi primer programa "complejo" en la uni y ps compila y todo, pero a la hora de realizar una busqueda simplemente no me funciona en el programa uso la función strcmp vean mi codigo:

Código:
#include <stdio.h>
#include <string.h>
#define NALUMNOS  10
#define NMATERIAS 5
struct materia {
    char nom[50];
    float calif;
};

struct alumno {
    char nombre[50];
    int edad;
    char sexo, marca;
    struct materia mat[NMATERIAS];
};

struct alumno ListaAlumnos[NALUMNOS];
void limpieza () {
    int i;
    for(i=0;i<NALUMNOS;i++)
        ListaAlumnos[i].marca='0';
}
float promedio () {
    int j,x;
    char cad[50];
    float suma=0;
    printf("\nIntroduce el nombre del alumno ");
    fpurge(stdin);
    gets(cad);
    if ((x=buscar(cad))!=-1) {
        for (j=0;j<NMATERIAS;j++) 
            suma+=ListaAlumnos[x].mat[j].calif;
    }
    else
            printf("\nAlumno no encontrado");
    suma/=NMATERIAS;
    return suma;
}
char menu() {
    char op;
    printf("\nMENU");
    printf("\n1.Insertar");
    printf("\n2.Eliminar");
    printf("\n3.Modificar");
    printf("\n4.Buscar");
    printf("\n5.Listar todo");
    printf("\n6.Obtener promedio del alumno");
    printf("\n7.Mostrar informacion de un alumno");
    printf("\n8.Salir");
    printf("\nOPCION: ");
    fpurge(stdin);
    scanf("%c",&op);
    return op;
}
int buscar(char bus[]) {
    int i,regresar,r;
    for (i=0;i<NALUMNOS;i++) {
        if (ListaAlumnos[i].marca=='1') {
         r=strcmp(bus,ListaAlumnos[i].nombre);
         if (r==0) {
            regresar=i;
            i=NALUMNOS;
         }
        }
    }
    if (regresar==0)
        regresar=-1;
    printf("\n%i",regresar);
    return regresar;
}
void insertar() {
    int i=0,ban=0,r,j,k;
    char resp;
    for (k=0;k<NALUMNOS;k++) {
    if (ListaAlumnos[i].marca=='0') {
        printf("\nDame tu nombre ");
        fpurge(stdin);
        gets(ListaAlumnos[i].nombre);
        r=strlen(ListaAlumnos[i].nombre);
        while (r>50) {
            printf("\nEl tamaño del nombre es muy grande (mayor a 50 caracteres), ó el alumno ya existe");
            printf("\nVuelva a insertar otro alumno ");
            fpurge(stdin);
            gets(ListaAlumnos[i].nombre);
        }
        printf("\nDame tu edad ");
        scanf("%i",&ListaAlumnos[i].edad);
        while (ListaAlumnos[i].edad<=0) {
            printf("tu edad es menor a cero, vuelva a ingresarla ");
            scanf("%i",&ListaAlumnos[i].edad);
        }
        printf("\nDime cual es tu sexo (m/f) ");
        scanf("%c",&ListaAlumnos[i].sexo);
        while (ListaAlumnos[i].sexo!='m' && ListaAlumnos[i].sexo!='f') {
            printf("Tu sexo no es valido vuelva a ingresarlo (m/f) ");
            fpurge(stdin);
            scanf("%c",&ListaAlumnos[i].sexo);
        }
        for (j=0;j<NMATERIAS;j++) {
            printf("\nDame el nombre de la materia ");
            fpurge(stdin);
            gets(ListaAlumnos[i].mat[j].nom);
            printf("ahora dame la calificación de la materia %s ",ListaAlumnos[i].mat[j].nom);
            scanf("%F",&ListaAlumnos[i].mat[j].calif);
            while (ListaAlumnos[i].mat[j].calif<0 || ListaAlumnos[i].mat[j].calif>10) {
                printf("\nTu calificacion debe estar entre 0 y 10, ");
                printf("vuelva a ingresarla ");
                scanf("%F",&ListaAlumnos[i].mat[j].calif);
            }
        }
        ListaAlumnos[i].marca='1';
        ban=1;
    }
    }
    if (ban==0)
        printf("\nNo hay espacios vacios para agregar alumnos, elimne algun alumno");
}
void modificar() {
    int x,ed,i,r,j;
    char nom[50];
    printf("\nQue alumno deseas modificar? ");
    fpurge(stdin);
    gets(nom);
    if (i=buscar(nom)!=-1) {
        printf("Deme los nuevos datos para el alumno %s",ListaAlumnos[i].nombre);
        printf("\nDame tu nombre");
        fpurge(stdin);
        gets(ListaAlumnos[i].nombre);
        r=strlen(ListaAlumnos[i].nombre);
        while ((buscar(ListaAlumnos[i].nombre)==-1)||(r>59)) {
            printf("\nEl tamaño del nombre es muy grande (mayor a 50 caracteres), ó el alumno ya existe");
            printf("\nVuelva a insertar otro alumno ");
            fpurge(stdin);
            gets(ListaAlumnos[i].nombre);
        }
        printf("\nDame tu edad ");
        scanf("%i",&ListaAlumnos[i].edad);
        while (ListaAlumnos[i].edad<=0) {
            printf("tu edad es menor a cero, vuelva a ingresarla ");
            scanf("%i",&ListaAlumnos[i].edad);
        }
        printf("\nDime cual es tu sexo (m/f) ");
        scanf("%c",&ListaAlumnos[i].sexo);
        while (ListaAlumnos[i].sexo!='m' && ListaAlumnos[i].sexo!='f') {
            printf("Tu sexo no es valido vuelva a ingresarlo (m/f) ");
            scanf("%c",&ListaAlumnos[i].sexo);
        }
        for (j=0;j<NMATERIAS;j++) {
            printf("\nDame el nombre de la materia ");
            fpurge(stdin);
            gets(ListaAlumnos[i].mat[j].nom);
            printf("ahora dame la calificación de la materia %s ",ListaAlumnos[i].mat[j].nom);
            scanf("%F",&ListaAlumnos[i].mat[j].calif);
            while (ListaAlumnos[i].mat[j].calif<0 || ListaAlumnos[i].mat[j].calif>10) {
                printf("\nTu calificacion debe estar entre 0 y 10, ");
                printf("vuelva a ingresarla ");
                scanf("%F",&ListaAlumnos[i].mat[j].calif);
            }
        }
    }
    else
        printf("\alumno no encontrado, imposible modificar");
}
void eliminar() {
    char nom[50];
    int pos;
    printf("\nQue alumno deseas eliminar? ");
    scanf("%s",nom);
    if (pos=buscar(nom)!=-1) 
        ListaAlumnos[pos].marca='0';
    else 
        printf("\nAlumno no encontrado");
}
void imprimir() {
    int i=0,j=0;
    for (i=0;i<NALUMNOS;i++) {
        if (ListaAlumnos[i].marca=='1') 
         printf("\nAlumno: %s",ListaAlumnos[i].nombre);
         printf("\nSexo: %c",ListaAlumnos[i].sexo);
         printf("\nEdad: %i",ListaAlumnos[i].edad);
         for (j=0;j<NMATERIAS;j++) {
            printf("\nCalificacion de %s: %F",ListaAlumnos[i].mat[j].nom,ListaAlumnos[i].mat[j].calif);
         }
        }
        printf("\n\tPromedio: %F",promedio());
}
main() {
    char opcion,busqueda[50];
    limpieza();
    do {
        switch (opcion=menu()) {
            case '1':
                insertar();
                break;
            case '2':
                eliminar();
                break;
            case '3':
                modificar();
                break;
            case '4':
                printf("\nA quien deseas buscar? ");
                fpurge(stdin);
                gets(busqueda);
                if ((buscar(busqueda))!=(-1))
                    printf("\nAlumno encontrado");
                else
                    printf("\nAlumno no encontrado");
                        
                break;
            case '5':
                imprimir();
                break;
            default: printf("\nOpcion no valida");
        }
    }
    while (opcion!='8');
    return 0;
}

Pero al momento de de realizar la busqueda aunque ponga ambas cadenas de igual forma no me devuelve un cero la función de cadena, me podrian informar si en alguna parte estoy mal. desde ya muchas gracias :)

P.S. el problema solo es con la busqueda lo demás me funciona bn
 
Volver
Arriba