Jump to content

Leitura de um ficheiro de texto


Tiago Viana

Recommended Posts

Tiago Viana

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 post
Share on other sites
Tiago Viana
Posted (edited)

Ao compilar no CLion não da qualquer tipo de erro, no entanto ao executar refere isto (a opção 2 ainda so está a executar a parte do codigo q coloquei acima).

zmeYCwD.png

(https://imgur.com/a/jKTakgq)

 

Obrigado ;)

Edited by Tiago Viana
Link to post
Share on other sites
thoga31

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 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.