Amigo, o erro mais grave seu foi do seu fscanf e fprintf estar com atributo parar ler string (%s) em uma variavel float (%f). Mas há mais problemas: O seu arquivo é: Quando o fscanf for ler a 1ª linha, ela lerá da seguinte maneira: fscanf(fp,"%s",&alu.nom); As funções de formatação scanf possuem um problema ao ler string: Se ela encontra um espaço ela termina a string. Ex.: A leitura da fscanf(fp,"%s",&alu.nom); gravaria em seu vetor de caracteres o seguinte: joao O resto da string ela desprezaria. E outra: a repetição (for) que você fez vai até 0, ou seja, de 0 até 0... Aí iria executar apenas uma vez, inutilizando o for. Então, para te ajudar: A função para verificar se é fim de arquivo ou não é feof() (retorna 0 caso seja fim de arquivo.) Grave a nota na outra linha, assim ficará mais fácil a leitura (separar os tipos de dados). Enquanto a linha onde têm o nome do aluno você leria do arquivo com o fgets, o nome do aluno você leria com a fscanf. Não sei se essas dicas vão te ajudar, mas.. Não esqueça de fechar o arquivo usando fclose()! No fopen() nos atributos, acrescente a letra "t" para certificar-se que abrirá um texto! Se deixar sem, alguns compiladores poderrão entender como arquivo binário! Bem, espero ter ajudado!