Save to file . txt (C language)

Asked

Viewed 200 times

1

    void gravar_para_ficheiro(struct estrutura2 *lista , struct estrutura *filme)
{
FILE *fp;
int i , index;
fp = fopen(listafilmes, "w+");
if (fp != NULL) {
    fprintf(fp,"Filmes %s\n\n",lista->nomes);
    for (i=0; i<lista->num_filmes; i++) {
        index = lista->filmes[i];
        fprintf(fp,"Nome do cinema : %s",filme[index].cinemas );
        fprintf(fp,"Filme: %s", filme[index].filme);
        fprintf(fp,"Genero: %d\n", filme[index].genero);
        fprintf(fp,"Duracao: %d\n", filme[index].duracao);
        fprintf(fp,"Idade Minima: %d\n", filme[index].idade_minima);
        printf("\n");
    }
    fclose(fp);
}
    }

Hi, I was wondering if there is an error in my code that prevents the saving of data in the txt file. At this point, when it comes to saving the program, it is an error. Thank you

EDIT : Complete code, main. c

I only uploaded the source file, so it may give you an error because of the txt file it is set to save to.

  • Which error is displayed?

  • The program simply closes, it seems the error saying that the program has stopped working, and goes below.

  • Could post the full code?

  • where is the statement of listafilmes?

  • I don’t think the instruction index = lista->filmes[i]; whatever you want, but I advise you to put the definition of the structures to be easy to see

  • The full code is a little big, about 600 lines, I’ll put the file for you to use and you can see the situation better

Show 1 more comment

1 answer

0


Based on your reasoning, follow a code (tested) capable of writing to a text file called lista_filmes.txt the content of a lista of filmes:

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

typedef struct filme_s
{
    char cinema[100];
    char titulo[100];
    int genero;
    int duracao;
    int idade_minima;
} filme_t;


typedef struct lista_filmes_s
{
    int num_filmes;
    filme_t * filmes;
} lista_filmes_t;


int gravar_para_ficheiro( const char * ficheiro, lista_filmes_t * lista )
{
    FILE  * fp = NULL;
    int i = 0;

    fp = fopen( ficheiro, "w+" );

    if(!fp)
        return -1;

    for( i = 0; i < lista->num_filmes; i++ )
    {
        fprintf( fp, "FILME #%d\n\n", i + 1 );
        fprintf( fp, "\tNome do cinema: %s\n",lista->filmes[i].cinema );
        fprintf( fp, "\tTitulo: %s\n", lista->filmes[i].titulo );
        fprintf( fp, "\tGenero: %d\n", lista->filmes[i].genero );
        fprintf( fp, "\tDuracao: %d\n", lista->filmes[i].duracao );
        fprintf( fp, "\tIdade Minima: %d\n", lista->filmes[i].idade_minima );
        fprintf( fp, "\n");
    }

    fclose(fp);

    return 0;
}


int main( void )
{
    lista_filmes_t lst; /* Lista de filmes */

    /* Aloca memoria na lista para acomodar 3 filmes */
    lst.filmes = malloc( sizeof(filme_t) * 3 );
    lst.num_filmes = 3;

    /* Cadastro Filme #1 */
    strcpy( lst.filmes[0].cinema, "Cinesystem");
    strcpy( lst.filmes[0].titulo, "Back to the Future");
    lst.filmes[0].genero = 5;
    lst.filmes[0].duracao = 116;
    lst.filmes[0].idade_minima = 0;

    /* Cadastro Filme #2 */
    strcpy( lst.filmes[1].cinema, "Kinoplex");
    strcpy( lst.filmes[1].titulo, "2001: A Space Odyssey");
    lst.filmes[1].genero = 5;
    lst.filmes[1].duracao = 142;
    lst.filmes[1].idade_minima = 12;

    /* Cadastro Filme #3 */
    strcpy( lst.filmes[2].cinema, "Kinoplex");
    strcpy( lst.filmes[2].titulo, "Contact");
    lst.filmes[2].genero = 5;
    lst.filmes[2].duracao = 149;
    lst.filmes[2].idade_minima = 8;

    /* Grava lista de filmes no arquivo */
    int ret = gravar_para_ficheiro( "lista_filmes.txt", &lst );

    /* Verifica se houve erro */
    if( ret < 0 )
    {
        fprintf( stderr, "Fatal: Erro de criacao/gravacao de arquivo!\n");
        return 1;
    }

    /* Libera memoria ocupada pela lista de filmes */
    free( lst.filmes );

    /* Sucesso */
    return 0;
}

Contents of the recorded file:

FILME #1

    Nome do cinema: Cinesystem
    Titulo: Back to the Future
    Genero: 5
    Duracao: 116
    Idade Minima: 0

FILME #2

    Nome do cinema: Kinoplex
    Titulo: 2001: A Space Odyssey
    Genero: 5
    Duracao: 142
    Idade Minima: 12

FILME #3

    Nome do cinema: Kinoplex
    Titulo: Contact
    Genero: 5
    Duracao: 149
    Idade Minima: 8

Browser other questions tagged

You are not signed in. Login or sign up in order to post.