Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

problemas com o fgets+strtok

Boa noite, bem quero fazer uma lista duplamente ligada, onde o núcleo é uma string, mas a entrada dos nomes é por uma linha única, mas o último nomo sai com um '\n' e não quero isso. alguém sabe como posso resolver isso?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct No {
    char info[41];
    struct No *ant;
    struct No *prox;
} No;

void imprimi_lista(No *lista) {
    if (lista != NULL) {
       printf("%s ", lista->info);
       imprimi_lista(lista->ant);
    }
}

No * liberar_lista_recursiva ( No * lista ) {
    if ( lista != NULL ) {
        liberar_lista_recursiva ( lista -> prox );
        free ( lista );
    }
    return NULL ;
}

int main(){
    No *lista = NULL;
    No *aux;
    char linha[501];
    printf("Digite os nomes\n");
    fgets(linha, 501, stdin);     /*exemplo de entrada: "ruan carlos cleber"*/

    char *nome; 
    nome = strtok(linha, " ");    /*separa a entrada pelo " "*/

    while( nome != NULL ) {

      printf("Nome: %s\n", nome);

      No *novo = ( No *) malloc ( sizeof ( No ));
      strcpy(novo->info, nome);
      novo->prox = lista;
      novo->ant = NULL;

      if(lista != NULL)
          lista->ant = novo;
      lista = novo;

      nome = strtok(NULL, " ");
    }

    aux = lista;
    while(aux->prox != NULL)
          aux = aux->prox;

    printf("\n");
    printf("Imprime\n");
    imprimi_lista(aux);   /*Saida errada: "ruan carlos cleber
                            "*/
    liberar_lista_recursiva(aux);
      return 0;
}
1 resposta
solução!

Encontrei no stackoverflow um questionamento que acredito ser parecido com o seu com algumas possiveis respostas de tratamentos do '\n' que poderia fazer antes de gerar a lista.

https://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input

Não cheguei a olhar todas as respostas postadas lá, mas uma que eu pensei logo ao ler sua pergunta foi tratar o último carácter pela correspondência com "\n" (ou o numérico equivalente) e reduzir esse carácter do tamanho da string (funciona pro seu caso? acredito que sim, mas vale o teste :D).