Write to .txt file (C language)

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);
}
    }

Hello, I would like to know if there is an error in my code that prevents the recording of data in the txt file. At this point, when you get to the part of recording the program gives error. Thanks

EDIT: Full Code, main.c

I just uploaded the code file, so it may give you an error because of the txt file it is set to write to.

    
asked by anonymous 11.01.2018 / 12:19

1 answer

0

Based on your reasoning, a code (tested) is able to write 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;
}

Recorded Content:

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
    
11.01.2018 / 15:59