What’s wrong with this excerpt?? file reading

Asked

Viewed 80 times

-4

What’s wrong with this excerpt?? I need to open a file to read and store in a struct, but if I put the condition in while feof!= 0, when I run it does not work. (this is a function that is being called in main)

#include <stdio.h>
#include <stdlib.h>
#define X 64

typedef struct aprovados{               
    int codigo_aprovados ;
    char titulo_do_aprovados[50];
    char area_de_aprovados[50];
    char nome_autor_aprovados[50];
    char nome_orientador_aprovados[50];
    char nome_coautor_aprovados[50];
    char nome_coorientador_aprovados[50];
    char conceito_aprovados[50];
    float nota_aprovados;
} aprovados;

void fazer_avaliacao(){

int sair2;
int b, selecionar_avaliacao;
FILE *leitura_projetos;
FILE *aprovados_projetos;

aprovados *lista_aprovados;
lista_aprovados = (aprovados *) malloc ( X * sizeof(aprovados));        // alocação

if(leitura_projetos==NULL){
    printf("!!! Erro de alocação!!!");
    main();
}   

leitura_projetos = fopen("projetos_cadastrados.txt","r");
while(feof(leitura_projetos)==0){
    fscanf(leitura_projetos,"%d",&lista_aprovados[b].codigo_aprovados);
    fgetc(leitura_projetos);
    fgets(lista_aprovados[b].titulo_do_aprovados, 50, leitura_projetos);
    fgets(lista_aprovados[b].area_de_aprovados, 50, leitura_projetos);
    fgets(lista_aprovados[b].nome_autor_aprovados, 50, leitura_projetos);
    fgets(lista_aprovados[b].nome_orientador_aprovados, 50, leitura_projetos);
    fgets(lista_aprovados[b].nome_coautor_aprovados, 50, leitura_projetos);
    fgets(lista_aprovados[b].nome_coorientador_aprovados, 50, leitura_projetos);

    b++;
}
fclose(leitura_projetos);

printf("__________ AVALIAÇÃO DOS PROJETOS __________ \n\n");
for(b=0; b<X; b++){
printf("Para fazer a avaliação dos projetos você deverá atribur um conceito (aprovado ou reprovado) e uma nota. \n\n");
    printf("CÓDIGO: %i \n", lista_aprovados[b].codigo_aprovados);
    printf("TÍTULO: %s \n", lista_aprovados[b].titulo_do_aprovados);
    printf("ÁREA DE CONHECIMENTO: %s \n", lista_aprovados[b].area_de_aprovados);
    printf("AUTOR PRINCIPAL: %s \n", lista_aprovados[b].nome_autor_aprovados);
    printf("ORIENTADOR: %s \n", lista_aprovados[b].nome_orientador_aprovados);
    printf("CO-AUTOR: %s\n", lista_aprovados[b].nome_coautor_aprovados);
    printf("COORIENTADOR: %s \n\n", lista_aprovados[b].nome_coorientador_aprovados);
    printf("Atribua um conceito: \n");
    printf("<1> APROVADO \t<2> REPROVADO\n>>");
    scanf("%i",&selecionar_avaliacao);
    switch(selecionar_avaliacao){
        case 1:
            printf("Atribua uma nota\n>>");
            scanf("%f",&lista_aprovados[b].nota_aprovados);
            strcpy(lista_aprovados[b].conceito_aprovados, "Aprovado");

            aprovados_projetos = fopen("aprovados.txt","a");
            fprintf(aprovados_projetos,"%i\n",lista_aprovados[b].codigo_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].titulo_do_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].area_de_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].nome_autor_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].nome_orientador_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].nome_coautor_aprovados);
            fprintf(aprovados_projetos,"%s\n",lista_aprovados[b].nome_coorientador_aprovados);
            fprintf(aprovados_projetos,"%c\n",lista_aprovados[b].conceito_aprovados);
            fprintf(aprovados_projetos,"&f\n",lista_aprovados[b].nota_aprovados);
            fprintf(aprovados_projetos,"/n");
            fclose(aprovados_projetos);

            system("cls");
            break;
        case 2:
            printf("!!! Você reprovou esse projeto !!! \n");    
            break;
    }

}               //chave do for 

free(lista_aprovados);
}

1 answer

-1

Good morning friend, Oce already tried to put in the while != EOF ?

And here at the beginning `int sair2; int b, select evaluation; FILE *leitura_projects; FILE *approved_projects;

aprovados *lista_aprovados;
lista_aprovados = (aprovados *)malloc(X * sizeof(aprovados)); // alocação

if (leitura_projetos == NULL)    {
    printf("!!! Erro de alocação!!!");
    main();
}

` You did it to check if the projects is NULL without doing any operation with it, and when doing so it will have memory junk.

  • yes, tried. when I put so the function nor it works

Browser other questions tagged

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