Código:
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 :) #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; }