estou escrevendo dados em um arquivo binário. no entanto, preciso reeditar os parâmetros da struct "contato" no mesmo arquivo mediante valores de entrada digitados pelo usuário.
consigo inserir e ler os arquivos normalmente por meio de outras funções.
porém, o "fwrite" da função abaixo (utilizada para reedição) não grava no arquivo (tentei imprimir diretamente da struct depois pra vê se tava ok e realmente o valor foi impresso).
obs.: o arquivo é aberto na função main com "rb+".
preciso editar o arquivo na condição do "if(!strncmp(bus......." (que é quando é encontrado o parâmetro de busca do usuário no arquivo).
void localiza_reg(){
int cont=1,parada=0;
struct contato c;
char busca[50],op;
printf("Entre com os dados\n");
printf("Novo nome:");
gets(c.id.nome);
fwrite(&c, sizeof(struct contato), 1, f); //***estou com problemas aqui
printf("%s",c.id.nome); //recebeu a entrada mas n salvou no arquivo mas é impresso normalmente
getch();
system("cls");
Pergunta
DiôgoNM
estou escrevendo dados em um arquivo binário. no entanto, preciso reeditar os parâmetros da struct "contato" no mesmo arquivo mediante valores de entrada digitados pelo usuário.
consigo inserir e ler os arquivos normalmente por meio de outras funções.
porém, o "fwrite" da função abaixo (utilizada para reedição) não grava no arquivo (tentei imprimir diretamente da struct depois pra vê se tava ok e realmente o valor foi impresso).
obs.: o arquivo é aberto na função main com "rb+".
preciso editar o arquivo na condição do "if(!strncmp(bus......." (que é quando é encontrado o parâmetro de busca do usuário no arquivo).
void localiza_reg(){
int cont=1,parada=0;
struct contato c;
char busca[50],op;
printf("Buscar por: ");
gets(busca);
printf("\n");
system("cls");
fseek(f,0,SEEK_SET);
do{
fread(&c, sizeof(struct contato), 1, f);
if (feof(f))
break;
if(!strncmp(busca,c.id.nome,strlen(busca)) || !strncmp(busca,c.id.sobrenome,strlen(busca))){
parada++;
}
} while(!feof(f));
system("cls");
rewind(f);
proximo:
do{
fread(&c, sizeof(struct contato), 1, f);
if (feof(f))
break;
if(!strncmp(busca,c.id.nome,strlen(busca)) || !strncmp(busca,c.id.sobrenome,strlen(busca))){
printf("registro %d/%d \n\n",cont,parada);
printf ("Nome: %s\n",c.id.nome);
printf ("Sobrenome: %s\n",c.id.sobrenome);
printf ("\n\n");
printf ("Nova busca\n");
printf ("Atualizar.\n\n");
printf ("Selecione sua opcao.\n");
op = toupper(getch());
system("cls");
cont++;
switch(op){
case 'N':
goto proximo;
case 'A':
if (feof(f)) {
printf("Registro não existente!\n");
return;
}
//DÚVIDA????????
printf ("nome: %s\n",c.id.nome);
printf ("sobre: %s\n",c.id.sobrenome);//tá realmente onde quero gravar
getch();
printf("Entre com os dados\n");
printf("Novo nome:");
gets(c.id.nome);
fwrite(&c, sizeof(struct contato), 1, f); //***estou com problemas aqui
printf("%s",c.id.nome); //recebeu a entrada mas n salvou no arquivo mas é impresso normalmente
getch();
system("cls");
goto proximo;
}
}
} while(!feof(f));
rewind(f);
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.