ayuda funcion buscar

Iniciado por silfer_1908, 22 Mayo 2019, 05:53 AM

0 Miembros y 1 Visitante están viendo este tema.

silfer_1908

Cuando uso la funcion buscar en mi codigo, esta no busca. Me podrian ayudar?

#include <stdio.h>
#include <string.h>
#define TAM 1000


struct Ferreteria{

    int sueldoH;
    char nombre[20], ap[30], direccion[20], telefono[10];
    char edad[2], contrato[30], hrsextras[5];

}p[TAM];

struct Ferreteria capturar(struct Ferreteria x){

printf("\nNOMBRE: ");
    fflush(stdin);
    scanf("%s", &x.nombre);
    printf("\nAPELLIDO: ");
    fflush(stdin);
    gets(x.ap);
    printf("\nDIRECCION: ");
    fflush(stdin);
    gets(x.direccion);
    printf("\nTELEFONO: ");
    fflush(stdin);
    gets(x.telefono);
    printf("\nTIPO DE CONTRATO: ");
    fflush(stdin);
    scanf("%s", &x.contrato);
    printf("\nHORAS EXTRAS: ");
    fflush(stdin);
    gets(x.hrsextras);
    return x;


}

void mostrar(struct Ferreteria x){

            fflush(stdin);
    printf("\nLOS DATOS SON: \n"
           "\nNOMBRE: %s \nAPELLIDO: %s"
           "\nDIRECCION: %s" "\nTELEFONO: %s\n"
           "TIPO DE CONTRATO: %s",
           x.nombre,x.ap, x.direccion, x.telefono, x.contrato,x.hrsextras);
           fflush(stdin);

           if(strcmp(x.contrato, "obrero")==0)
           {
               fflush(stdin);
               x.sueldoH=x.sueldoH+70;
               fflush(stdin);
               printf("\nSUELDO POR HORA: %i", x.sueldoH);
               fflush(stdin);
           }
           fflush(stdin);

           if(strcmp(x.contrato, "administrativo")==0)
           {
               fflush(stdin);
               x.sueldoH=x.sueldoH+80;
               fflush(stdin);
               printf("\nSUELDO POR HORA: %i", x.sueldoH);
               fflush(stdin);
           }

           if(strcmp(x.contrato, "jefe de area")==0)
           {
               fflush(stdin);
               x.sueldoH=x.sueldoH+90;
               fflush(stdin);
               printf("\nSUELDO POR HORA: %i", x.sueldoH);
           }
           fflush(stdin);


}

int buscar(struct Ferreteria x[], int n, char nom[]){
    int i;{
    for(i=0; i<n; i++)
        if (!(strcmp(x[i].nombre, nom))){
        return i;
        }
    }
return 0;

}

int localizar(struct Ferreteria x[], int n, char nom){
    int i;{
    for(i=0; i<n; i++)
        if (nom == x[i].nombre){
        return 1;
        }
    }
return 0;

}

int eliminar(struct Ferreteria x[], int n, int index){

    int i;

    for(i= index; i < n; i++)
        x[i] = x[i+1];
    n--;
    return n;


}


main(){

int n,i;
char c[20];

printf("CUANTOS EMPLEADOS QUIERES REGISTAR: ");
scanf("%d",  &n);
for(i = 0; i<n; i++)

p[i] = capturar(p[i]);

for(i=0; i<n; i++)
mostrar(p[i]);

    printf("\nNOMBRE DEL EMPLEADO: ");
    scanf("%s", &c);
        if(buscar(p,n,c))
            printf("si existe el empledado\n");
            else
            printf("no existe el empleado\n");



          int a= localizar(p,n,c);
        if(a >=0){

            n = eliminar(p,n,a);
            printf("registro eliminado");

            for(i = 0; i <n; i++)
            mostrar(p[i]);
        }
            else
                printf("no exsiste");

}


K-YreX

Aparte de los tantos <fflush(stdin)> que no deberían usarse, la función <gets()> que no debería usarse, la función <scanf()> para cadenas que tampoco debería usarse y los nombres de variables para nada específicos que supongo no vas a cambiar porque tú lo entiendes y con que lo entienda el que lo programa ya es suficiente... :silbar:
El problema lo tienes por usar unas veces <gets()> para guardar una cadena de caracteres (deberías usar <fgets()> mejor) y otras veces <scanf()>. <gets()> o su variante más segura <fgets()> guardan el enter del final como un salto de línea; mientras que el <scanf()> no guarda el salto de línea.
Por eso si tú escribes "Pepe" en un <gets()>, estás guardando "Pepe\n" mientras que si escribes "Pepe" en un <scanf()> estás guardando "Pepe". Por eso las cadenas no son iguales.
PD: La función <localizar()> no te va a funcionar como creo que esperas :silbar:
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;