Estou criando a primeira lista encadeada, mas na hora de imprimir o conteudo da lista está imprimindo so o primeiro valor digitado, não estou conseguindo encontrar o erro, se puder me dar uma ajuda
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct cadastro_produto{
char nome[30];
float preco_atacado;
float preco_varejo;
struct cadastro_produto *prox;
} produto;
int main (){
setlocale (LC_ALL, "Portuguese");
produto *ini, *fim;
char resposta;
ini = (produto *) malloc(sizeof(produto));
if (ini == NULL) return 0;
fim = ini;
while (1){
printf ("\nInforme o nome do produto: ");
scanf ("%s", fim->nome);
printf ("\nInforme o preço do produto no atacado: ");
scanf ("%f", &fim->preco_atacado);
printf ("\nInforme o preço do produto no varejo: ");
scanf ("%f", &fim->preco_varejo);
printf ("\nDeseja cadastrar outro produto? (s)im (n)ão: ");
scanf ("%s", &resposta);
while ((resposta != 'n') && (resposta != 'N') &&(resposta != 's') && (resposta != 'S')){
printf ("\nValor informado invalido");
printf ("\nDeseja cadastrar outro produto? (s)im (n)ão: ");
scanf ("%s", &resposta);
}
if (resposta == 'N' || resposta == 'n') break;
else /*(resposta == 'S' || resposta == 's')*/{
fim -> prox = (produto *) malloc (sizeof(produto));
if (fim -> prox == NULL) return 0;
fim = fim -> prox;
}
}
fim -> prox = NULL;
fim = ini;
while (fim != NULL){
printf ("\nProduto: %s", fim->nome);
printf ("\nPreço no atacado: %.2f", fim->preco_atacado);
printf ("\nPreço no varejo: %.2f\n\n", fim -> preco_varejo);
fim = fim -> prox;
}
return 0;
}