Jump to content

Recommended Posts

Posted

Boas a todos eu gostaria de saber como posso passar de um ficheiro binário que o programa criou ?

Por exemplo passo isto:


#include <stdio.h>

#define maxFICHA_DE_FRUTAS 10000

typedef struct ficha_de_frutas //FUNCAO PARA QUALQUER FICHA DE FRUTAS
{
int id;
char tipo[50];
char condicao[50];

} FICHA_DE_FRUTAS;

FICHA_DE_FRUTAS ficha_de_frutas [maxFICHA_DE_FRUTAS];

para um ficheiro binário sempre que crio uma ficha com isto:

FICHA_DE_FRUTAS ficha_frutas;
ficha_frutas=ficha_de_frutas[i];
FILE * frutas;
frutas = fopen("ficha_de_frutas.dat","a+");
fwrite(&ficha_frutas, 1, sizeof(ficha_de_frutas[i]),frutas);

e agora gostaria de saber como posso abrir o ficheiro "ficha_de_componentes.dat" com "n" fichas criadas, de modo a que quando eu vá ver as fichas que tenho consiga ver tudo certinho assim:

void mostrar_ficha_de_componentes(int i)
{
printf("	 +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_Frutas[i].id);
printf("					 Identificacao:%d\n",ficha_de_frutas[i].id);
printf("					  Tipo:%s",ficha_de_frutas[i].tipo);
printf("					   Condicao:%s",ficha_de_frutas[i].condicao);
printf("																			\n");
printf("	 +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_frutas[i].id);
system("pause");
}

Já andei a ver aqui https://wiki.portugal-a-programar.pt/dev_geral/c/ficheiros/ mas fiquei mal esclarecido :s

Posted

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

Será qualquer coisa deste género ?

FILE * frutas;
frutas = fopen("ficha_de_frutas.dat","r");
fread(&ficha_frutas, 1, sizeof(ficha_de_frutas[i]),frutas);
ficha_frutas=ficha_de_frutas[i];
FICHA_DE_FRUTAS ficha_frutas;
Posted (edited)

o teu fread esta' mal


size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

seria mehor fazer um dump da array para o ficheiro e depois fazer dump do ficheiro para a memoria.

fread(&fichas_de_frutas,sizeof(fichas_de_frutas),sizeof(fichas_de_frutas)/sizeof(FICHA_DE_FRUTAS),frutas);
Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

o teu fread esta' mal


size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

seria mehor fazer um dump da array para o ficheiro e depois fazer dump do ficheiro para a memoria.

fread(&fichas_de_frutas,sizeof(fichas_de_frutas),sizeof(fichas_de_frutas)/sizeof(FICHA_DE_FRUTAS),frutas);

Com este código irei fazer acontecer o que propriamente ? Onde o irei pôr ?

Posted

ve se percebes o codigo:

/* fgets example */
#include <stdio.h>
#include <string.h>
#define maxFICHA_DE_FRUTAS 10000

typedef struct fichadefrutas //FUNCAO PARA QUALQUER FICHA DE FRUTAS
{
    int id;
    char tipo[50];
    char condicao[50];

} FICHA_DE_FRUTAS;

FICHA_DE_FRUTAS ficha_de_frutas [maxFICHA_DE_FRUTAS];

void populate()
{
   FICHA_DE_FRUTAS* temp=&ficha_de_frutas[888];

   temp->id=666;
   strcpy(temp->condicao,"alguma condicao");
   strcpy(temp->tipo,"algum tipo");
}
void mostrar_ficha_de_componentes(int i)
{
   static int as=0;
    printf("		 +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_frutas[i].id);
    printf("										 Identificacao:%d\n",ficha_de_frutas[i].id);
    printf("										  Tipo:%s",ficha_de_frutas[i].tipo);
    printf("										   Condicao:%s",ficha_de_frutas[i].condicao);
    printf("																																					    \n");
    printf("		 +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",as);
    //system("pause");
    as++;
}

int main()
{
  FILE * pFile;
  char mystring[100];

  pFile = fopen ("a.bin" , "w");
  if (pFile == NULL)
   printf("Error opening file");

   populate();
   mostrar_ficha_de_componentes(888);

   printf("gravado %d elements",fwrite(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile));
   fclose (pFile);

//apagar a array, para ter certeza que os dados que serao lidos do ficheiro sao verdadeiros
   memset(ficha_de_frutas,0,maxFICHA_DE_FRUTAS*sizeof(FICHA_DE_FRUTAS));
 mostrar_ficha_de_componentes(888);

pFile = fopen ("a.bin" , "rb");
   fread(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile);
 mostrar_ficha_de_componentes(888);
 fclose(pFile);

  return 0;
}

esta a funcionar, ve se te ajuda

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

envia aqui no topico, porque assim, toda a gente consegue ver o problema e ajudar

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

onde está o problema ???

typedef struct {
....
} MyStruct;

int main(void) {
 FILE * file = NULL;
 MyStruct dados;


 // abrir o ficheiro para escrita
 ....
 fwrite(&dados, // posição de memória onde se encontra os dados a serem escrito no ficheiro
	 sizeof(MyStruct), // número de bytes de cada elemento a ser escrito
	 1, // número de elementos a serem escritos
	 file); // ponteiro para o ficheiro
 // fechar o ficheiro
 ...

 // abrir o ficheiro para leitura
 ...
 fread(&dados, // posição de memória onde se irá guardar os bytes lidos
	sizeof(MyStruct), // número de bytes de cada elemento a ser lido
	1, // número de elementos a serem lidos
	file); // ponteiro para o ficheiro
 // fechar o ficheiro
 ...
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

Esse programa está a correr, eu é que não percebi muito bem.

Mas pronto irei pôr o fread na main, antes do menu principal ?

Do genero

int main (bla bla)
{
FILE*pfle;
pfile=open("ficha_frutas.dat","rb");
fread(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile);
...
menu
...
}
Edited by davide92
Posted

nao seria melhor teres uma opcao para fazer load?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

Como assim load ?

falei em load no sentido de fazer o dump do ficheiro para a memoria

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

nunca jogaste um jogo em que aparece um ecra(antes de jogares) que diz "loading"?

load e' carregar dados, so' que estavame a faltar a palavra em portugues 😛

podes fazer o load no inicio ou ter uma opcao que deixe o utilizador fazer o load.

EDIT: Corrijam-me se eu estiver enganado, "dump" significa guardar os dados da aplicacao(memoria) para algum local que pode ser um ficheiro.

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

entao mete o codigo logo no inicio LOL

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

LOL meto assim ?

int main (void)
{
   FILE*pFile;
   pFile=fopen("ficha_de_componentes.bin","rb");
   if((pFile=fopen("ficha_de_componentes.bin","rb"))==NULL)
   {
    puts("\n"
		 "\n"
		 "\n"
		 "\nImpossivel abrir o ficheiro pretendido!"
		 "\n"
		 "\n"
		 "\n");
    puts("AVISO!!!"
		 "\n"
		 "\nNAO SERA CARREGADO NENHUM FICHEIRO!"
		 "\n"
		 "\n");
    system("PAUSE");
    system("cls");
   }
   else
   {
    puts("\n"
		 "\n"
		 "\n"
		 "\nFICHEIRO CARREGADO COM SUCESSO!"
		 "\n"
		 "\n"
		 "\n");
   }
   fread(ficha_de_componentes,sizeof(ficha_de_componentes[0]),maxFICHA_DE_COMPONENTES,pFile);
...
menu
...
}
Posted

tantos '\n', so deves fazer fread se o ficheiro for aberto

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.