@herbertbahia @herbertbahia
@arfneto
Sim, sei poucas diferenças entre c e c++, daí vou fznd meio q misturado kk. Mudei bem pouca coisa no código, só para corrigir aquilo, que não estava substituindo corretamente o 2° conjunto de dados, segue o código:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
void criar_arq2(char nome_arq[])
{
FILE *parq = fopen(nome_arq,"wb");
char nome[20];
int idade;
float altura;
if (parq == NULL)
printf("Erro ao abrir arquivo!!!\n\n");
else
{
int r = 1;
do
{
printf("\nDigite nome, idade e altura: ");
scanf("%s %i %f",nome, &idade, &altura);
fwrite(&nome,sizeof(nome),1,parq);
fwrite(&idade,sizeof(idade),1,parq);
fwrite(&altura,sizeof(altura),1,parq);
printf("\nDigite zero para parar: ");
scanf("%i", &r);
}
while(r);
fclose(parq);
}
}
void ler_arq_2(char nome_arq[])
{
FILE *parq = fopen(nome_arq,"rb");
char nome[20];
int idade;
float altura;
if (parq == NULL)
printf("Erro ao abrir arquivo!!!\n\n");
else
{
while (fread(&nome,sizeof(nome),1,parq))
{
fread(&idade,sizeof(idade),1,parq);
fread(&altura,sizeof(altura),1,parq);
printf("nome : %s\n",nome);
printf("idade : %d\n",idade);
printf("altura: %.2f\n",altura);
}
fclose(parq);
}
}
void substituir_arq2(char nome_arq[])
{
FILE *parq = fopen(nome_arq,"r+b");
char nome2[20] = "Maria";
int idade2 = 15;
float alt2 = 1.55;
fseek(parq,28,SEEK_SET); //Aqui o fseek pula para onde seria na teoria a 4° linha do arquivo, onde começa o 2° conjunto de dados, assim para substitui-lo por Maria 15 1.55
fwrite(&nome2,sizeof(nome2),1,parq);
fwrite(&idade2,sizeof(idade2),1,parq);
fwrite(&alt2,sizeof(alt2),1,parq);
fclose(parq);
}
int main()
{
cout << "Exercício criar o arquivo:\n\n\n" << endl;
cout<<"Digite o nome do arquivo:\n\n";
char arq[20];
cin>>arq;
criar_arq2(arq);
ler_arq_2(arq);
substituir_arq2(arq);
cout<<"\n\n\n";
ler_arq_2(arq);
return 0;
}