Tiago Viana Posted April 6, 2021 at 01:49 AM Report Share #621896 Posted April 6, 2021 at 01:49 AM 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 More sharing options...
RicardoLopes Posted April 6, 2021 at 07:55 AM Report Share #621898 Posted April 6, 2021 at 07:55 AM Qual é o erro que te dá? segmentation fault? Link to comment Share on other sites More sharing options...
Tiago Viana Posted April 6, 2021 at 05:44 PM Author Report Share #621901 Posted April 6, 2021 at 05:44 PM 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). Obrigado 😉 Link to comment Share on other sites More sharing options...
thoga31 Posted April 7, 2021 at 12:14 PM Report Share #621908 Posted April 7, 2021 at 12:14 PM 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. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now