Jump to content

Leitura de um ficheiro de texto


Tiago Viana

Recommended Posts

Boas!

 

Tenho um codigo que fiz para q fosse feita a leitura de um ficheiro para um array de struct. No entanto dá erro a sua execução.

typedef struct aluno{
    int num;
    float nota1;
    float nota2;
    float notaP;
}ALUNO;
void colocarArray(ALUNO ficheiro[], int nAlunos){
    int i=0;
    fp=fopen("alunos.txt","r");

    if(fp==NULL) printf("\nErro!");

    while(fscanf(fp, "\n%i;%f;%f;%f", ficheiro[i].num, ficheiro[i].nota1, ficheiro[i].nota2,
           ficheiro[i].notaP)!=EOF) i++;
    fclose(fp);
}

 

Link to comment
Share on other sites

A função fscanf() devolve o número de elementos lidos correctamente. EOF é um caracter e seria utilizado, por exemplo, para comparar com o retorno de um fgetc(). Se queres ler 4 elementos de uma vez, então deverás verificar que, a cada iteração, foram lidos 4 elementos correctamente. Assim que falhar, deverás ter chegado ao fim do ficheiro ou a uma parte dele que não está devidamente formatada.

Por outro lado, tal como no scanf(), tens de passar os endereços das variáveis. Neste caso, falta o operador &.

Por fim, diria que a forma mais eficaz de desconsiderar os whitespaces é usar um espaço e não \n no início do formato lido pelo fscanf().

while(fscanf(fp, " %d;%f;%f;%f", &ficheiro[i].num, &ficheiro[i].nota1, &ficheiro[i].nota2, &ficheiro[i].notaP) == 4)
  i++;

Cumprimentos.

  • Vote 1

Knowledge is free!

Link to comment
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.