Enviado em 10/06/2015 - 10:33h
Bom dia galera,
Estou tentando desenvolver um programa, que leia um arquivo.bin de funcionários e que solicite a matrícula de cada funcionário e verifique registro a registro no arquivo, se a matrícula existe e solicite uma atualização de salário.
Após ler o arquivo e salvar em uma struct de vetor, uso a função fseek para posicionar o arquivo no início. Depois coloco um for para percorrer a struct, e verificar se existe o registro. O problema é que, se a matrícula estiver no final do arquivo, ele percorre todo o for e retorna que não encontrou e depois que encontrou.
Será que alguém poderia me ajudar por favor a melhorar esse código? No enunciado do exercício, é solicitado que seja feita uma atualização interativamente.
#include <stdio.h>
#include <stdlib.h>
#define N sizeof(tipoDadosFunc)
typedef struct {
int matric;
char depto[30], nome[30];
float sal;
} tipoDadosFunc;
int main(){
int i = 0;
int cont = 0;
int mat;
tipoDadosFunc funcionario[N];
FILE* fp;
fp = fopen("salario_atualizado.bin", "rb");
if(fp==NULL){
printf("Erro ao abrir o arquivo\n");
exit(EXIT_FAILURE);
}
cont = fread(&funcionario, sizeof(tipoDadosFunc),sizeof(tipoDadosFunc),fp);
fseek(fp,0, SEEK_SET);
printf("%d \n", cont);
printf("Digite sua matrícula: \n");
scanf("%d", &mat);
for(i=0;i<cont;i++){
if(funcionario[i].matric == mat)
printf("Digite o valor do salário \n");
scanf("%f", &funcionario[i].sal);
} else{
printf("Não encontrado \n");
}
}
return 0;
}
Estou tentando desenvolver um programa, que leia um arquivo.bin de funcionários e que solicite a matrícula de cada funcionário e verifique registro a registro no arquivo, se a matrícula existe e solicite uma atualização de salário.
Após ler o arquivo e salvar em uma struct de vetor, uso a função fseek para posicionar o arquivo no início. Depois coloco um for para percorrer a struct, e verificar se existe o registro. O problema é que, se a matrícula estiver no final do arquivo, ele percorre todo o for e retorna que não encontrou e depois que encontrou.
Será que alguém poderia me ajudar por favor a melhorar esse código? No enunciado do exercício, é solicitado que seja feita uma atualização interativamente.
#include <stdio.h>
#include <stdlib.h>
#define N sizeof(tipoDadosFunc)
typedef struct {
int matric;
char depto[30], nome[30];
float sal;
} tipoDadosFunc;
int main(){
int i = 0;
int cont = 0;
int mat;
tipoDadosFunc funcionario[N];
FILE* fp;
fp = fopen("salario_atualizado.bin", "rb");
if(fp==NULL){
printf("Erro ao abrir o arquivo\n");
exit(EXIT_FAILURE);
}
cont = fread(&funcionario, sizeof(tipoDadosFunc),sizeof(tipoDadosFunc),fp);
fseek(fp,0, SEEK_SET);
printf("%d \n", cont);
printf("Digite sua matrícula: \n");
scanf("%d", &mat);
for(i=0;i<cont;i++){
if(funcionario[i].matric == mat)
printf("Digite o valor do salário \n");
scanf("%f", &funcionario[i].sal);
} else{
printf("Não encontrado \n");
}
}
return 0;
}