c – Lista encadeada funciona, mas não entrega o inteiro esperado

Construi essa lista circular encadeada, ela funciona e não apresenta nenhum erro, porém ao buscar pelo número inserido é apresentado um valor totalmente fora do comum, como se estivesse pegando o valor da memória que está alocada e não o que o usuário digitou. Onde posso está errando? acredito que é apenas um detalhe.

Me desculpem pelo o código extenso.

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

//Estrutura dos nos da lista
typedef struct no
{
  int inteiro;
  struct no *prox;
} No;

//Estrutura da Lista
typedef struct
{
  No *Primeiro, *Ultimo;
  int qt;
} Lista;

//Funcao que cria um no com o inteiro 'inteiro'
No *CriarNo(int inteiro);

//Função para criar uma lista VAZIA
Lista *CriarLista();

//Função para retornar o tamanho da Lista
int TamanhoLista(Lista *ls);

//Função para verificar se a lista está vazia
bool ListaVazia(Lista *ls);

//Função para verificar o Primeiro no que contem inteiro na Lista
No *PrimeiroLista(Lista *ls);

//Função para verificar o ultimo no que contem inteiro na Lista
No *UltimoLista(Lista *ls);

//Função que retorna o no anterior da posicao 'pos'
No *PreIndiceNo(Lista *ls, int pos);

//Funcao que retorna o indice do nodo que possui o inteiro 'inteiro'
int ProcurarinteiroLista(Lista *ls, int inteiro);

//Funcao que insere inteiro em uma lista na posicao 'pos'
bool InserirLista(Lista *ls, int inteiro, int pos);

//Função que remove elemento de uma lista na posição 'pos'
bool RemoverIndiceLista(Lista *ls, int pos);

//Funcao que remove elemento de uma lista pelo inteiro
bool inteiroRemoverLista(Lista *ls, int inteiro);

//Funcao que mostra todos os elementos de uma lista
void MostrarLista(Lista *ls);
//Função para limpar o buffer de memoria

//Função que cria um nodo com o inteiro 'inteiro'
No *CriarNo(int inteiro)
{
  No *no = (No *)malloc(sizeof(No));
  no->inteiro, inteiro;
  no->prox = NULL;
  return no;
}

int ArmazenaValor( int inteiro){
    system("cls");
    
  No *no = CriarNo(inteiro);

  return inteiro;
}

//Função que cria uma lista vazia
Lista *CriarLista()
{
  Lista *ls = (Lista *)malloc(sizeof(Lista));
  ls->Primeiro = ls->Ultimo = NULL;
  ls->qt = 0;
  return ls;
}
//Função que retorna o tamanho de uma lista
int TamanhoLista(Lista *ls)
{
  return ls->qt;
}
//Função que verifica se lista esta vazia
bool ListaVazia(Lista *ls)
{
  system("cls");
  return ls->qt == 0;
}
//Função que retorna o primeiro no da lista
No *PrimeiroLista(Lista *ls)
{
  return ls->Primeiro;
}

//Função que retorna o ultimo no da lista
No *UltimoLista(Lista *ls)
{
  return ls->Ultimo;
}
//Função que retorna o no anterior da posicao 'pos'
No *PreIndiceNo(Lista *ls, int pos)
{
  system("cls");
  No *pre;
  for (pre = ls->Primeiro; pre != NULL && pos > 1; pos--)
  {
    if (pre != UltimoLista(ls))
      pre = pre->prox;
    else
      pre = NULL;
  }

  return pre;
}
//Função que retorna o indice do no que possui o inteiro (inteiro)
int ProcurarinteiroLista(Lista *ls, int inteiro)
{
  system("cls");
  int i;
  No *no = ls->Primeiro;

  for (i = 0; no != NULL; i++)
  {
    if (no->inteiro == inteiro)
      return i;
    if (no != UltimoLista(ls))
      no = no->prox;
    else
      no = NULL;
  }
  return -1;
}

//Função que insere inteiro em uma lista na posicao 'pos'
bool InserirLista(Lista *ls, int inteiro, int pos)
{
  if (pos < 0 || pos > ls->qt)
    return false; //caso pos invalido

  No *no = CriarNo(inteiro);

  if (ls->qt == 0)
  { //se lista vazia
    ls->Primeiro = ls->Ultimo = no;
  }
  else if (pos == 0)
  { //se posição da inserção for no inicio
    no->prox = ls->Primeiro;
    ls->Primeiro = no;
  }
  else if (pos == ls->qt)
  { //se posição da inserção for no final
    ls->Ultimo->prox = no;
    ls->Ultimo = no;
  }
  else
  { //qualquer outra inserção
    No *pre = PreIndiceNo(ls, pos);
    if (pre == NULL)
      return false;
    no->prox = pre->prox;
    pre->prox = no;
  }

  ls->Ultimo->prox = ls->Primeiro; //atualizando próximo elemento do Algoritmo nodo para o inicio da lista
  ls->qt++;                        //+1 no tamanho da lista
  return true;
}

//Função que remove elemento de uma lista na posicao 'pos'
bool RemoverIndiceLista(Lista *ls, int pos)
{
  if (pos < 0 || pos >= ls->qt)
    return false; //caso pos invalida

  No *deletar; //elemento a ser deletado

  if (ls->qt == 1)
  { //se lista possuir apenas 1 elemento
    deletar = ls->Primeiro;
    ls->Primeiro = ls->Ultimo = NULL;
  }
  else if (pos == 0)
  { //se posicao de remoção for o primeiro item da lista
    deletar = ls->Primeiro;
    ls->Primeiro = deletar->prox;
    ls->Ultimo->prox = ls->Primeiro; //atualizando proximo elemento do Algoritmo nodo para o inicio da lista
  }
  else
  {                                 //qualquer outro caso possível
    No *pre = PreIndiceNo(ls, pos); //elemento anterior ao que deve ser deletado
    if (pre == NULL)
      return false;

    deletar = pre->prox;
    if (pos == ls->qt - 1)
      ls->Ultimo = pre;
    pre->prox = deletar->prox; //proximo elemento de pre vira o próximo do elemento de del
  }

  free(deletar); //liberando memoria do nodo deletado

  ls->qt--; //-1 no tamanho da lista
  return true;
}

//Funcao que remove elemento de uma lista pelo inteiro
bool inteiroRemoverLista(Lista *ls, int inteiro)
{
  int pos = ProcurarinteiroLista(ls, inteiro);
  return RemoverIndiceLista(ls, pos);
}
//Função que mostra todos os elementos de uma lista
void MostrarLista(Lista *ls)
{
  system("cls");
  if (ls->qt == 0)
  {
    printf("Lista vazia.");
    return;
  }

  bool Inicio;
  No *no;

  for (no = ls->Primeiro, Inicio = true; no != NULL; Inicio = false)
  {
    if (!Inicio)
      printf(", ");
    printf(" %d", no->inteiro);
    if (no != UltimoLista(ls))
      no = no->prox;
    else
      no = NULL;
  }
}

//Método que verifica se min<=x<=max
bool ValorNoMeio(int x, int min, int max)
{
  return min <= x && x <= max;
}

//método que le o numero 'x' até que ele seja min<=x<=max
void LerValorNoMeio(int *x, int min, int max)
{
  bool valido;
  do
  {
    scanf("%d", x);
    if (!(valido = ValorNoMeio(*x, min, max)))
      printf("Valor invalido. Tente novamente.n");
  } while (!valido);
}

//método para menu de inserção
void MenuInserir(Lista *ls)
{
  system("cls");
  int inteiro;
  int x, pos;

  printf("Informe o inteiro: ");
  scanf("%d", &inteiro); 
  (ArmazenaValor(inteiro));
  printf("Voce gostaria de inserir no inicio(0), meio(1) ou fim(2) da lista?n");
  LerValorNoMeio(&x, 0, 2); //lendo opcao de inserção

  switch (x)
  {
  case 0: //inserção no inicio
    pos = 0;
    break;
  case 1: //inserção no meio (personalizada entre inicio da lista <-> fim da lista)
    printf("Informe onde voce gostaria de inserir na lista (0 <-> %d): ", TamanhoLista(ls));
    LerValorNoMeio(&pos, 0, TamanhoLista(ls));
    break;
  case 2: //inserção no fim da lista
    pos = TamanhoLista(ls);
    break;
  default: //invalido
    pos = -1;
  }

  if (InserirLista(ls, inteiro, pos))
    printf("nInserido com sucesso!n"); //inseriu com sucesso
  else
    printf("nFalha na insercao!"); //falha na insercao
}

//método para menu Exibir
void MenuMostrar(Lista *ls)
{
  int op;
  do
  {
    system("cls");

    printf("==========MENU EXIBIR==========n"
           "1) Lista vazian"
           "2) Elemento do inicion"
           "3) Elemento do finaln"
           "4) Contar nosn"
           "5) Mostrar listan"
           "0) Voltarn"
           "nOpcao: ");
    scanf("%d", &op);
    printf("n");

    switch (op)
    {
    case 0: //voltar ao menu anterior
      return;
    case 1: //verificar se lista estão¡ vazia
      if (ListaVazia(ls))
        printf("A Lista esta vazia.n"); //se lista vazia
      else
        printf("A Lista nao esta vazian"); //se lista nao vazia
      break;
    case 2: //mostrar elemento do inicio da lista
      if (ListaVazia(ls))
        printf("Lista vazia.n"); //se lista vazia
      else
        printf("Elemento do inicio da Lista: %sn", PrimeiroLista(ls)->inteiro); //elemento do inicio
      break;
    case 3: //mostrar elemento do final da lista
      if (ListaVazia(ls))
        printf("Lista vazia.n"); //se lista vazia
      else
        printf("Elemento do final da Lista: %sn", UltimoLista(ls)->inteiro); //elemento do final
      break;
    case 4: //mostrar quantidade de nos na lista
      system("cls");
      printf("Quantidade de nos na lista: %dn", TamanhoLista(ls));
      break;
    case 5: //mostrar lista completa
      MostrarLista(ls);
      printf("n");
      break;
    default: //invalida
      printf("Opcao invalidan");
    }
    printf("n");
    system("pause");
  } while (op != 0);
}
//Menu de remocao
void MenuRemover(Lista *ls)
{
  system("cls");
  if (ListaVazia(ls))
  { //caso lista vazia
    printf("Lista vazia. Nao e possivel remover.n");
    return;
  }

  int op, x;
  int inteiro;
  printf("Voce gostaria de remover a partir do indice(0) ou pelo inteiro(1)?n");
  LerValorNoMeio(&op, 0, 1); //lendo tipo de remocao

  switch (op)
  {
  case 0: //remocao por indice
    printf("Informe o indice para remocao (0 <-> %d): ", TamanhoLista(ls) - 1);
    LerValorNoMeio(&x, 0, TamanhoLista(ls) - 1);
    if (RemoverIndiceLista(ls, x))
      printf("Remocao bem-sucedida!n"); //caso remocao bem sucedida
    else
      printf("Nao foi possivel remover o indice solicitado!n"); //caso remocao mal sucedida
    break;
  case 1: //remocao por inteiro
    printf("Informe o inteiro a ser deletado da lista: ");
    scanf("%d", &inteiro);
    if (inteiroRemoverLista(ls, inteiro))
      printf("Remocao bem-sucedida!n"); //caso remocao bem sucedida
    else
      printf("Nao foi possivel remover nenhum item com o inteiro informado.n"); //caso remocao mal sucedida
    break;
  }
}
//Menu de busca
void MenuProcurar(Lista *ls)
{
  system("cls");
  if (ListaVazia(ls))
  { //Caso lista vazia
    printf("Lista vazia. Insira elementos antes de fazer uma pesquisa.n");
    return;
  }
  int inteiro;
  printf("Informe o inteiro a ser buscado na lista: ");
  scanf("%d", &inteiro);                     //lendo inteiro
  int x = ProcurarinteiroLista(ls, inteiro); //buscando inteiro na lista

  if (x >= 0)
    printf("Elemento encontrado no indice %d!n", x); //caso encontrado
  else
    printf("Elemento nao encontrado!n"); //caso nao encontrado
}

int main()
{
  Lista *ls = CriarLista();
  int op;

  do
  {
    system("cls");
    printf("==========MENU PRINCIPAL==========n"
           "1) Inserirn"
           "2) Exibirn"
           "3) Removern"
           "4) Buscarn"
           "0) Sairn"
           "nOpcao: ");
    scanf("%d", &op);

    printf("n");
    switch (op)
    {
    case 0: //sair
      printf("Encerrando...n");
      continue;
    case 1: //inserir
      MenuInserir(ls);
      break;
    case 2: //exibir
      MenuMostrar(ls);
      continue;
    case 3: //remover
      MenuRemover(ls);
      break;
    case 4: //buscar
      MenuProcurar(ls);
      break;
    default: //invalida
      printf("Opcao invalidan");
    }
    printf("n");
    system("pause");
  } while (op != 0);

  return 0;
}