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");
}
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: