Ler strings de ficheiro

TheRunner

Power Member
Bem pessoal o problema é o seguinte, eu tenho que ler de um ficheiro elementos de uma musica, ou seja, titulo da musica, banda/artista e duração. Após uma tentativa com fscanf percebi que não dava pois lia-me só palavras e não a frase toda. O ficheiro (é um excerto) tem a seguinte estrutura:

Eu tenho dois amores
Marco Paulo
224
Contentores
Xutos e Pontapes
267

Estou a tentar ler com o seguinte código:

do{

fgets(titulo, DIM, f);
fgets(banda, DIM, f);
fscanf(f, "%d", &duracao);

printf("%s\n", titulo);
printf("%s\n", banda);
printf("%d\n", duracao);

}while(!feof(f));

Os printfs foram para testar e a DIM é igual a 30. O resultado é este:

Eu tenho dois amores

Marco Paulo

224


Contentores

224
Xutos e Pontapes

267

224

É um output bastante confuso e com mudanças de linha a mais :s

Bem se alguém me poder dar uma mãozinha agradecia ;)

Cumps
 
Tanto quanto sei o fgets conversa o \n num ficheiro, daí recomendo que tires o ultimo caracter(aconselhável, vais ao ultimo elemento da string e colocas '\0'), ou que retires o \n no printf.
 
Sinceramente não percebi muito bem.. Podias ser um bocado mais específico? Obrigado ;)

Ao usares o fgets ele lê o ficheiro até chegar a, por exemplo, um \n o qual é também lido.
Desse modo tens uma string que é "qualquer coisa\n"
E ao fazeres o printf estás a fazer "qualquer coisa\n\n" o que resulta em 2 mudanças de linha.

Das duas uma:
Fazes strlen da string que leste e mudas o ultimo caracter da string para \0 em vez do \n

ou

no printf tiras o \n (solução pior na minha opinião porque só estás a remediar o problema).

Claro que isto depende do tipo de trabalho que tens de fazer.

Cumps
 
O trabalho é inserir os dados numa lista com a estrutura:

char *titulo
char *banda
int duracao
MusPtr prox;

Qual é que achas a melhor solução? Em principio será a de usar o strlen certo? É que eu não posso alterar o ficheiro de input..
 
Back
Topo