Jump to content

Problema a guardar dados de um ficheiro


RicardoLopes
 Share

Recommended Posts

Boas, eu estou aqui com um pequeno problema no meu codigo.

tree loadfile(char file[],tree t){
int val=0, total=0;
char code[40];
FILE *d;
d=fopen(file,"r");
if (d!=NULL){
 while(fgets(code,40,d)!=NULL){
  if (code[strlen(code)-1]=='\n') code[strlen(code)-1]='\0';
  else code[strlen(code)]='\0';
  if (validecode(file,code)){
   t=inserir(t,code);
   val++;
  }
  total++;
 }
 printf("%s\n",code);
 fclose(d);
 printf("%s carregado com succeso, %d codigos validados %d codigos lidos\n",file,val,total);
}
else printf("Erro ao carregar o ficheiro %s\n",file);
return t;
}

Ele não dá erro a compilar e a executar tbm não, o problema é que tenho uma função que recebe uma árvore e verifica se uma dada string lá existe ou não e esta devolve me sempre falso tirando à excepção da última linha que lê. Eu tenho uma função que imprime todas as strings que estão numa arvore e elas aparecem todas lá, por isso não faço mesmo a minima do que seja. Alguma ideia do que possa ser?

Edited by rdolxd
Link to comment
Share on other sites

Alguma ideia do que possa ser?

mais do que uma ideia, sei exactamente qual é o problema.

olha para o segundo parágrafo da segunite explicação da função fgets:

URL : http://www.cplusplus.com/reference/cstdio/fgets/

Reads characters from stream and stores them as a C string into str until (num-1) characters have been read or either a newline or the end-of-file is reached, whichever happens first.

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

A terminating null character is automatically appended after the characters copied to str.

Notice that fgets is quite different from gets: not only fgets accepts a stream argument, but also allows to specify the maximum size of str and includes in the string any ending newline character.

já sabes qual é o problema ?

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

já sabes qual é o problema ?

Mais ou menos, eu suspeitava dos newlines, mas em cima no código que meti aí, eu tenho uma linha para tirar os newlines e meter \0 caso os tivesses... E pelo menos quando chamo a função para imprimir as strings que estão na estrutura de dados ela não me imprimo um newline a mais que era o que acontecia quando eu não tinha essa linha

Link to comment
Share on other sites

Estive agora a tentar "ver" o que não deveria estar na string supostamente, acontece que fiz um ciclo para ver em que posição estaria o \n na string, as strings do ficheiro tem sempre este tipo AA123 (duas maiusculas e 3 numeros), e aparecia me o indice 6, não deveria ser no indice 5? e depois fiz printf dos caracteres que estivesse no indice 5 da string e não aparecia nada isto é possivel?

edit: já descobri, tinha um \r antes do \n, mas só não percebo porque que tem o \r atrás

Edited by rdolxd
Link to comment
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
 Share

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