Programa em C – printf todos valores atribuidos em um loop

Estou fazendo um programa simples onde voce pode organizar como numa planilha as suas compras do mes, com o preço ao lado e no final ele te diz o total do valor dessas compras. Sou iniciante.

Mas me deparei com uma duvida que nao acho reposta em nenhum lugar. Como eu faço para imprimir todos os valores atribuidos a uma variavel por meio de scanf e depois imprimi-los em sequencia?
Enquanto em um loop, eu pergunto varias vezes o nome do produto e seu preço e ao encerrar o loop, quero que imprima na tela todos os nomes + valores que atribui durante o loop.

Do jeito que ele esta, quando eu tento executar o loop mais de uma vez, a interface buga e ele so imprime o ultimo valor que voce atribuiu as variaveis.

Parte das perguntas:

    do {
    printf("Digite o nome do produto:n");
     fgets(produto,30,stdin);

    printf("Digite o seu preço:n");
     scanf("%f", &valor);

    printf("Há algum desconto no preço? 1. Sim\2.Naon");
     scanf("%d", &op);

    if (op == 1) {
     printf("Quantos %% de desconto?n");
     scanf("%d", &desc);
     conta = (valor * desc)/100;
     novo_valor = valor - conta;
    }

    else if (op == 2) {
     novo_valor = valor;
    }

  printf("Finalizar? Para sim, digite 0, para continuar 1n");
  scanf("%d", &lista);
   } while (lista != 0);

     valor_total += novo_valor;

Exemplo do que eu desejo que apareça:

PRODUTO PREÇO

Leite 3.50

Biscoito 5.50

TOTAL: 9.00