Ola caros colegas, me deparei com um erro no meu programa com o código abaixo, já tentei várias coisas, porém para mim não faz sentido este erro! É o seguinte, o programa deve pedir ao usuário uma chave de pesquisa(um nome), abrir o arquivo, procurar o nome, e mostrar na tela a struct associada a este nome. Ele é apenas um esboço inicial, sem o ifs apropriados para controle e algo mais sofisticado. Está tudo correto, testei várias vezes, as strings estão sendo lidas corretamente, as structs do arquivo estão sendo lidas e postas em memoria primaria (variáveis) corretamente! Aparentemente, a única coisa que não esta sendo lida corretamente é a função strcmp que compara a variável pesquisa com as structs.
Me parece que apenas ocorre este erro depois do while(!feof(arq){ , pois testei com outra string criada para comparar com a pesquisa antes dela, e deu certo. Frisarei novamente que esta sendo lida corretamente pelo fread as structs do arquivo.
obs: no arquivo que gerei por outro programa, é gerado corretamente um arquivo(cadastros.dat) e posta 5 structs nele.
Segue o código:
#include <stdio.h>#include <string.h>#include <stdlib.h>struct cadastro{ char nome[10]; char endereco[30]; int idade;};int main(){ struct cadastro cad[5]; char pesquisa[10]; int cont,numreg,true=0; FILE *arq; arq=fopen("cadastros.dat","r+b"); if(arq==NULL){ printf("***Erro na abertura do arquivo, não encontrado!**"); } printf("Digite a pesquisa: "); scanf("%s",pesquisa); cont=0; while(!feof(arq)){ if(fread(&cad[cont],sizeof(struct cadastro),1,arq)==1){ /*lê do arquivo a struct*/ if(strcmp(cad[cont].nome,pesquisa)==0){ /* compara o atual nome capturado com com pesquisa*/ numreg=cont+1; /*registro atual para o usuário*/ true=1; /* caso encontre igual*/ break; } cont++; } } fclose(arq); if(true==1){ printf("\n\n\t Registro encontrado: numero %d\n nome: %s\n endereco: %s\n idade: %d",numreg,cad[numreg-1].nome,cad[numreg-1].endereco,cad[numreg-1].idade); } getchar(); return(0); }