Problemas na hora de escrever em um arquivo em C

Eu tenho uma lista de pessoas e preciso criar um arquivo chamado bdpessoas.txt e armazenar cada “pessoas” em uma linha com os atributos separadas por virgula, porém está ficando assim:

Arquivo:

Maria
;974544540-81
;38
;1.69
Joao
;616369913-20
;42
;1.73
Roberto
;968382752-89
;20
;1.65
Carlos
;752538230-43
;17
;1.88
Maggie;622941353-04;51;1.59

Código da criação do arquivo e armazenamento dos dados:

void criar_bd_pessoa(tpessoa *vet_pessoa){
    FILE *fileRead; 
    fileRead = fopen("bdpessoas.txt", "w");

    if(fileRead == NULL){
        printf("Erro na abertura do arquivo!");
        return 1;
    }

    for(int j = 0; j < 5; j++){
        fprintf(fileRead, "%s;%s;%s;%s", vet_pessoa[j].nome,vet_pessoa[j].cpf,vet_pessoa[j].idade, vet_pessoa[j].altura);
    }

    fclose(fileRead);
  
    printf("Dados gravados com sucesso!");
}

Código da criação da lista de pessoas:

void preencher_lista_pessoa(tpessoa *vet_pessoa, tcharitem *vet_nome, tcharitem *vet_cpf, tfloatitem *vet_idade, tfloatitem *vet_altura){
    for(int j = 0; j < 5; j++){
        vet_pessoa[j].nome = vet_nome[j].descricao; 
        vet_pessoa[j].cpf = vet_cpf[j].descricao; 
        vet_pessoa[j].idade = vet_idade[j].numero; 
        vet_pessoa[j].altura = vet_altura[j].numero; 
    }       
}

Ao fazer a leitura do texto digitado pelo usuário e armazenar nas strings (c-strings) que são os membros do seu tipo (uma estrutura) o pulo de linha vai junto. Você não mostrou como está lendo esses valores, aliás.

Por exemplo, antes de abrir o arquivo, tente mostrar os membros de tpessoa, algo assim:

printf( "nome: %s teste", vet_pessoa[0].nome );

Você notará que será impresso o pulo de linha. Ou seja, o último caractere da sua string é um \n. Caso o nome seja “Joao”, isso aqui será impresso:

Joao
 teste

Para remover o pulo de linha final de uma string, isso é o suficiente:

suaString[strlen(suaString)-1] = '\0';

Que faz com que o último caractere da string seja preenchido com o caractere nulo que, em C, indica o fim da string armazenada no array de char.

[]'s

Os dados são pegos a partir da leitura de um arquivo txt.

Funcionou o que você falou, obrigada!

O mesmo vale, pq cada linha é separada por um caractere de pulo de linha.

Que bom que deu certo :wink: