Jump to content
costricardo

Listas / Structs

Recommended Posts

costricardo

Boas pessoal programador :P

Estava aqui a fazer um code de listas ligadas e structs, e não sei como fazer a leitura de um ficheiro binario pa struct e vice-versa.

O meu codigo está assim: a função abre open não abre nem a grava...:/

#include <stdio.h>
#include <stdlib.h>

int count = 0; //num carros

typedef struct{

    char s1[3], s2[3], s3[3];


}MATRICULA;

typedef struct carro{

    char modelo[30], marca[30], cor[30];
    MATRICULA matricula;

    struct carro *prox;

    struct carro *anterior;


}CARRO;

typedef CARRO *FILA;

void inic(FILA *Fila)
{

    *Fila = NULL;

}

void insere(FILA *Fila)
{
    if(*Fila == NULL) // para guardar em ficheiro é por a function insert na guard
    {

        *Fila = (FILA) malloc(sizeof(CARRO));

        if(*Fila == NULL) exit(0);

        printf("Modelo: "); scanf("%s", (*Fila)->modelo);
        printf("Marca: "); scanf("%s", (*Fila)->marca);
        printf("Cor: "); scanf("%s", (*Fila)->cor);
        printf("Matricula: "); scanf("%s%s%s", (*Fila)->matricula.s1, (*Fila)->matricula.s2, (*Fila)->matricula.s3);

        (*Fila)->prox = NULL ;

        count ++;

    }

    else insere(&(**Fila).prox);

}

void grava(FILA *Fila)
{
    FILE *fp = fopen("carros.txt", "r+b");

    while(*Fila != NULL)
    {

        fwrite(Fila, sizeof(CARRO),1,fp);

        (*Fila) = (*Fila)->prox;

    }


}

void open()
{
    CARRO buff[20];
    FILE *fp = fopen("carros.txt","r+b");

    while(fread(buff,sizeof(CARRO),1,fp)>0);

    printf(buff);




}
CARRO *apaga(CARRO *Fila, char *s1, char *s2, char *s3)
{
    if(Fila == NULL) return NULL;

   if(  strcmp(  (Fila)->matricula.s1, s1 ) == 0 && strcmp( (Fila)->matricula.s2, s2 ) == 0 &&
    strcmp((Fila)->matricula.s3, s3) == 0) {

          CARRO  *tmp;

          tmp = (Fila)->prox;

          free(Fila);


        return tmp;

      }

       (Fila)->prox = apaga((Fila)->prox, s1,s2,s3);


     return Fila;

}//FIM FUNCTION DELETE


void lista(FILA Fila)
{

    if(Fila == NULL) exit(0);

   printf("%s\n", (Fila)->modelo);
   printf("%s\n", (Fila)->marca);
   printf("%s\n", (Fila)->cor);
   printf("%s-%s-%s\n", (Fila)->matricula.s1, (Fila)->matricula.s2, (Fila)->matricula.s3);


    lista(Fila->prox);
}

int abre(char * nomeFicheiro, FILA *ip)
{

    int R = 0;
FILE * fp;
FILA initLista = NULL;
FILA fimLista = NULL;
FILA novo = NULL;


fp = fopen(nomeFicheiro,"rb");


novo = (CARRO*)malloc(sizeof(CARRO)); // alocar novo Block 

while(fread(novo, sizeof(CARRO), 1, fp) > 0)
{	R++; // count

		fimLista->prox = novo;
		novo->anterior = fimLista;
		fimLista = novo;


	novo = (CARRO*)malloc(sizeof(CARRO));
}


fclose(fp);

R--;

free(novo);

fimLista->prox = NULL;

(*ip) = initLista;

return R;
}



int main()
{
    int nregist = 0;
    char op, *s1,*s2,*s3, *nome ="carros.dat" ;
    FILA point;

    inic(&point);

    while(1)
    {
        system("cls");
        printf("a)Inserir:\nb)Apagar\nc)Listar\nd)Abre Ficheiro\ne)Sairf)Guarda:\nEscolha: ");
        scanf("%c", &op);

        switch(op)
        {
            case 'a':system("cls"); printf("Inserir dados:\n"); insere(&point); break;


            case 'b':system("cls"); printf("Pagar dados:\n");
            scanf("%s%s%s", s1,s2,s3);
            point = apaga(point,s1, s2, s3); break;


            case 'c':system("cls"); lista(point); break;


            case 'd':system("cls"); printf("Abre Ficheiro"); nregist = abre(nome,&point); break;

            case 'e':open();break;

            case 'f':grava(&point);

        }




    }// Fim do while

    return 0;
}


I´m a Geek and you?www.tecnologias.in

Share this post


Link to post
Share on other sites
Cr4zYPT

Coloca uma verificação para ver se o ficheiro esta a ser aberto.

if(fp==NULL)
puts("Erro ao abrir ficheiro");

Share this post


Link to post
Share on other sites
RuSs0

Alguem me pode ajudar aguardar uma lista ligada em html???

Preciso mesmo de finalizar o programa!!!

comprimentos

Share this post


Link to post
Share on other sites
RSFalcon7

percorres a lista e imprime a informação num ficheiro já com as tags html

Share this post


Link to post
Share on other sites

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.