Oi Tudo bem?
Eu implementei uma função que imprime o arquivo binário, veja se ajuda:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct PERFUME {
struct PERFUME *esq, *dir;
int cod;
char nome[30];
float preco;
} *raiz = NULL,*aux = NULL;
typedef struct PERFUME *arvore_ptr;
//prototipos para passar para o outro arquivo
void Inserir (arvore_ptr*, int, char[], float);
void Pesquisar (arvore_ptr, int);
/*int c = codigo char n[] = nome[30] float preco = p*/
void Inserir (arvore_ptr *pai, int c, char n[], float p) {
if ((*pai)) {
if (c < (*pai) -> cod)
Inserir(&((*pai) -> esq), c, n, p);
else
Inserir(&((*pai) -> dir), c, n, p);
}
else {
(*pai) = (arvore_ptr) malloc (sizeof (struct PERFUME));
if (*pai) {
(*pai) -> cod = c;
strcpy((*pai) -> nome, n);
(*pai) -> preco = p;
(*pai) -> esq = NULL;
(*pai) -> dir = NULL;
}
}
}
void Pesquisar (arvore_ptr raiz, int c) {
if (raiz) {
if (c == raiz-> cod) {
printf("codigo = %d\n", raiz -> cod);
printf("nome = %s\n", raiz -> nome);
printf("preco %d = %.2f\n", raiz -> preco);
aux = raiz;
return;
}
else {
if (c < raiz -> cod)
Pesquisar(raiz -> esq, c);
else
Pesquisar(raiz -> dir, c);
}
}
}
void sbinario () {
FILE *fp;
fp = fopen ("Binario.dat", "ab"); //wb para escrita //rb para leitura
if (fp == NULL) {
printf ("Erro ao abrir o arquivo.\n");
exit(1);
}
else {
//if (fp != NULL) {}
printf ("Arquivo Binario criado com sucesso.\n");
fwrite(&raiz, sizeof(raiz), 1, fp);
fclose (fp);
}
}
/*Função reponsavel por exibir o conteudo do arquivo .dat*/
void imprime(){
FILE * fp;
fp = fopen ("Binario.dat", "rb");
if (fp == NULL) {
printf ("Erro ao abrir o arquivo.\n");
exit(1);
}
while(fread(&raiz,sizeof(raiz),1,fp)){
printf("%d, %s, %.2f\n",raiz->cod,raiz->nome,raiz->preco);
}
fclose(fp);
}
void stexto () {
FILE * arquivo_texto;
arquivo_texto = fopen ("arquivo_texto.txt", "a"); //duvida aqui se é r ou a
if (arquivo_texto == NULL) {
printf("Erro ao abrir o arquivo.\n");
exit(1);
}
//%s string //%d integer
fprintf(arquivo_texto, "%d %s %2f\n", raiz->cod, raiz->nome, raiz->preco);
printf("%d %s %2f\n",raiz->cod, raiz->nome, raiz->preco);
fclose(arquivo_texto);
}
int main() {
int opcao =1;
int entrada;
char nome1[30];
float p;
char temp[30];
while(opcao!=0) {
printf("|________________________|\n\n\n\n");
printf("=====>Menu<=====\n");
printf("________________\n");
printf("1-->Inserir\n");
printf("2-->Pesquisar\n");
printf("3-->Salvar Binario\n");
printf("4-->Salvar Texto\n");
printf("5-->Imprimir Texto\n");
printf("0-->Sair \n");
printf("________________\n");
printf("Opcao:");
scanf("%d%*c", &opcao);
switch(opcao)
{
case 1:{
printf("\nDigite o codigo: ");
gets(temp);
entrada = atoi(temp);
printf("digite o nome: ");
gets(nome1);
printf("digite o preco: ");
gets(temp);
p = atof(temp); //string para float
Inserir(&raiz,entrada, nome1, p);
break;
}
case 2:{
printf("\nDigite o codigo: ");
gets(temp);
entrada = atoi(temp); //string para int
Pesquisar(raiz,entrada);
if (aux) {
printf("\n %d Existe na arvore\n",entrada);
}
else
printf("\n %d Nao existe na arvore",entrada);
break;
}
case 3:{
sbinario();
break;
}
case 4: {stexto();
break;
}
case 5:{
imprime();
break;
}
}
}
}
[]'s