Jump to content
nunolevezinho

fgets lê apenas máximo de 2 caracteres

Recommended Posts

nunolevezinho

Boas, estou a tentar ler um ficheiro de texto com o seguinte formato:

12: 25
56: 123
77: 10

Estou a usar um ciclo igual a este :

while(fgets(buffer, sizeof(buffer), file) != NULL)
{
id[i] = atoi(buffer);
fgets(buffer, sizeof(buffer), file);
quantidade[i] = atoi(buffer);

printf("ID: %d\nQuantidade: %d\n\n", id[i], quantidade[i]);
i++;
}

O problema é que depois de ler o 56, lê: 12 e 3 separadamente.

O que poderá estar a causar este erro ?

Edited by nunolevezinho

Share this post


Link to post
Share on other sites
pmg

Suponho que definiste buffer com tamanho para 4 elementos

char buffer[4];

Não te esqueças que, em C, as string têm um elemento de valor 0 que marca o fim da string; portanto só tens espaço para 3 caracteres "normais" em buffer.

Ou seja, a primeira leitura lê "12:"; a segunda leitura lê "25\n";

a terceira leitura lê "56:"; a quarta leitura lê " 12" (ESPAÇO UM DOIS); a quinta leitura lê "3\n"

a sexta leitura lê "77:" ...

Sugestão: aumenta o tamanho de buffer para uma coisa que apanhe a linha toda (char buffer[1000];) e depois converte os valores para inteiro a partir da linha toda.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
nunolevezinho

É isso que eu acho estranho :/

o meu buffer está a fazer a alocação de memória, penso eu que "correctamente"

char * BufferSpaceAlloc(FILE **RetailFile, char *buffer)
{
 int FileLenght;
 fseek(*RetailFile, 0, SEEK_END);
 FileLenght=ftell(*RetailFile);
 fseek(*RetailFile, 0, SEEK_SET);
 buffer=(char *)malloc(FileLenght+1);
 if(!buffer)
 {
  printf("Erro ao alocar memoria!\n");
  return;
 }
 return buffer;
}

char *buffer={NULL};

file = OpenFile(&file, filename, "r");

buffer = BufferSpaceAlloc(&file, buffer);

/*  ciclo while  */

Está a retornar algo do género:

SDqPfwM.png

Edited by nunolevezinho

Share this post


Link to post
Share on other sites
Trinkes

É isso que eu acho estranho :/

o meu buffer está a fazer a alocação de memória, penso eu que "correctamente"

char * BufferSpaceAlloc(FILE **RetailFile, char *buffer)
{
 int FileLenght;
 fseek(*RetailFile, 0, SEEK_END);
 FileLenght=ftell(*RetailFile);
 fseek(*RetailFile, 0, SEEK_SET);
 buffer=(char *)malloc(FileLenght+1);
 if(!buffer)
 {
  printf("Erro ao alocar memoria!\n");
  return;
 }
 return buffer;
}

char *buffer={NULL};

file = OpenFile(&file, filename, "r");

buffer = BufferSpaceAlloc(&file, buffer);

/*  ciclo while  */

Está a retornar algo do género:

SDqPfwM.png

o isec está cá em força...xD

lê como inteiro com o fscanf...isso vai resolver-te o problema.

Share this post


Link to post
Share on other sites
nunolevezinho

lixo = BufferSpaceAlloc(&file, lixo);

while (!feof(file))
{

 fscanf(file, "%d%s%d", &id[i], lixo, &quantidade[i]);
 i++;

}

Obrigado pela dica! :thumbsup:

Share this post


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.