Ir para conteúdo
Fórum Script Brasil
  • 0

Leitura de dados direto do arquivo


Morsil

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

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]

Link para o comentário
Compartilhar em outros sites

  • 0

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 por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Esta mostrando a menos.

Ele so mostra os 25 primeiros, e no caso de quando repete, ele repete o 25.

A estrutura dadosalunos é a seguinte

typedef 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 por Morsil
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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=149516

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...