Morsil Postado Junho 13, 2011 Denunciar Share Postado Junho 13, 2011 Olá pessoal.Estou necessitando de uma ajuda com um trabalho da faculdade.Neste trabalho eu preciso ler inumeras informações gravadas em um arquivo e exibi-las na tela.Para isto estou usando a função FREAD dentro de um laço WHILE.Porém só são exibidos 25 dados.Segue o trecho do código que criei para fazer isto.fread(&aluno, sizeof(dadosalunos), 1, arq); while(!feof(arq)){ printf("\t%s\n", aluno.nome); fread(&aluno, sizeof(dadosalunos), 1, arq); }Detalhe: o FREAD fora do laço, é para evitar a repetição do último elemento.Por favor me ajudem com este problema.Desde já agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 13, 2011 Denunciar Share Postado Junho 13, 2011 só são exibidos 25, mas quanto tem dentro do txt?? 26??se for isso, então faltou um printf depois q ele fechar o while.e não entendi a parte de repetir o ultimo elemento...se, na verdade, por acaso você quer dizer q quer evitar a repeticao do primeiro elemento, então o codigo todo deve ficar assim, nem vai precisar do printf() q falei acima:while(!feof(arq)){ fread(&aluno, sizeof(dadosalunos), 1, arq); printf("\t%s\n", aluno.nome);}[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Morsil Postado Junho 13, 2011 Autor Denunciar Share Postado Junho 13, 2011 Como eu havia dito, são inúmeros dados, no monento estou trabalhando com 30.E a respeito do fread fora, fiz do jeito que você me indicou e ele me retornou o ultimo dado duas vezes. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 13, 2011 Denunciar Share Postado Junho 13, 2011 (editado) mas esta mostrando a mais ou a menos?? e esta mostrando o 25 duas vezes ou o 30 duas vezes??se for o 30, então não entendi direito o q ta acontecendo...mas qual a estrutura de dadosalunos e como estao os dados no txt mais ou menos??os nomes q aparecem são os nomes corretos q estao salvos no txt, ou os eles estao aparecendo corrompidos?? Editado Junho 13, 2011 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Morsil Postado Junho 13, 2011 Autor Denunciar Share Postado Junho 13, 2011 (editado) Esta mostrando a menos.Ele so mostra os 25 primeiros, e no caso de quando repete, ele repete o 25.A estrutura dadosalunos é a seguintetypedef struct dadosalunos{ int id; char nome[20]; float n1, n2, nf; } dadosalunos;No txt aparecem TODOS os nomes/registros normalmente.E são lidos sem nenhum problema, fora o de não aparcer do 25 pra frente. Editado Junho 13, 2011 por Morsil Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Morsil Postado Junho 20, 2011 Autor Denunciar Share Postado Junho 20, 2011 Reparei que com outra estrutura, menor, ele me mostra mais dados, não consegui ver quantos ao total, mas devido a isto, acho que o problema deve ser com o FREAD só ler uma tamanho máximo, que tambem não sei e não acho qual é.Por favor me ajudem. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 20, 2011 Denunciar Share Postado Junho 20, 2011 hum, eu acho q deve ser algum problema na hora de escrever o arquivo q esta corrompendo os dados. como você faz pra escreve-lo??lembre-se tambem q a propriedade nome, declarada com 20 posicoes, não pode passar de 19 caracteres, pois é necessario um caracter a mais pra guardar o valor 0 (final de string).ou seja, se em alguma struct o nome tiver um texto de 20 caracteres, é possivel q ocorram erros na hora da leitura, mas não tenho certeza se causariam esse efeito... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Morsil Postado Junho 23, 2011 Autor Denunciar Share Postado Junho 23, 2011 Testei meu código no linux, e ele funcionou perfeitamente, por isso vou continuar trabalhando nele no linux, pois estou com pressa nete projeto.Kuroi, agradeço a ajuda e no futuro quando consegui resolver posto a resolução aqui. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 23, 2011 Denunciar Share Postado Junho 23, 2011 morsil, agora q você disse q funciona no linux mas não no windows, me lembrei desse tópico aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=149516se você tiver usando o fgets() na hora de criar o arquivo, possivelmente pode ser o mesmo problema q comentei no meu 3 post daquele tópico, quando a string ficar muito grande. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 25, 2011 Denunciar Share Postado Junho 25, 2011 nossa, eu postei o post de cima com pressa e agora vim conferir com mais calma e vi q só escrevi besteira.realmente não parece ser exatamente o mesmo problema do outro tópico. e o fgets() é usado pra ler o arquivo e não escrever como eu disse antes (não sei o q eu tava pensando...), e o codigo de ler o arquivo você já postou.morsil, qual modo você esta usando pra abrir o arquivo com o fopen()?? se você estiver abrindo como "r", tente usar "rb" (abre para leitura como binario). no linux isso não deveria fazer diferenca, mas no windows sim. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Morsil
Olá pessoal.
Estou necessitando de uma ajuda com um trabalho da faculdade.
Neste trabalho eu preciso ler inumeras informações gravadas em um arquivo e exibi-las na tela.
Para isto estou usando a função FREAD dentro de um laço WHILE.
Porém só são exibidos 25 dados.
Segue o trecho do código que criei para fazer isto.
Detalhe: o FREAD fora do laço, é para evitar a repetição do último elemento.
Por favor me ajudem com este problema.
Desde já agradeço.
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.