You have not made clear which error is happening or presented the file problem2.bin
. Also, your code is badly formatted in the question. Anyway, I played your program by adding a step for creating the file before reading. The program worked normally. That could mean some things:
- The file does not exist;
- You are not allowed to read the file;
- File content is invalid;
- There’s another error in your code that you’re not seeing (and didn’t present to us).
Follow the code I used for testing.
#include <stdio.h>
#include <string.h>
typedef struct {
int codigo;
char departamento;
char nome[30];
float salario;
} DadosFuncionario;
int main() {
FILE *fp;
DadosFuncionario funcionarioEscrita, funcionario;
int qt;
// Inicializa funcionario para escrita
funcionarioEscrita.codigo = i;
funcionarioEscrita.departamento = 'a';
strcpy(funcionarioEscrita.nome, "Fulano de Tal");
funcionarioEscrita.salario = 200.30;
// Escreve dados do funcionario no arquivo
fp = fopen("funcionarios.bin", "wb");
if (fp == NULL) {
printf("Erro ao tetar abrir arquivo pra escrita...\n");
return -1;
}
size_t numeroDeBytes = fwrite(&funcionarioEscrita, sizeof(DadosFuncionario), 1, fp);
if (numeroDeBytes*sizeof(DadosFuncionario) != sizeof(DadosFuncionario)) {
printf("Erro ao tentar escrever no arquivo...\n");
return -2;
}
fclose(fp);
// Realiza a leitura do arquivo
fp = fopen("funcionarios.bin", "rb");
if (fp == NULL) {
printf("Erro ao tentar abrir arquivo para leitura...\n");
return -3;
}
qt = 0;
while(fread(&funcionario, sizeof(DadosFuncionario), 1, fp) != 0) {
printf ("Codigo do Funcionario: %d \n", funcionario.codigo);
printf ("Departamento.........: %c \n", funcionario.departamento);
printf ("Nome.................: %s \n", funcionario.nome);
printf ("Salario..............: %.2f \n\n", funcionario.salario);
qt++;
}
printf ("A quantidade de funcionarios eh: %d \n", qt);
fclose(fp);
return 0;
}