Jump to content

problema em inserir uma sequência de números


Recommended Posts

Posted (edited)

Boa tarde,

Estou aqui a praticar C mas tenho aqui algumas dúvidas numa função que tenho para inserir os dados de novos clientes.

A função deve atribuir um número automático e sequencial(1,2,3,4,5.....) ao número que identifica cada cliente a função está a funcionar:

void inserirClientes(tCliente clientes[MAX_CLIENTES], int *numeroClientes)
{
int posicao, numeroAux,i;
if (*numeroClientes<MAX_CLIENTES)
{


        numeroAux=*numeroClientes+1;
        clientes[*numeroClientes].numero=numeroAux;
        printf("Insira o nome do cliente:");
        lerString(clientes[*numeroClientes].nome,MAX_NOME);
        (*numeroClientes)++;
}
else
{
    printf("Limite de clientes atingido: %d\n Nao pode inserir mais componentes.\n", MAX_CLIENTES);
}
}

O problema é quando eu elimino um cliente, por exemplo elimino o cliente que está na posição 1, quando vou a inserir clientes a função entra em loop!!!

Código da função eliminar:

void eliminarClientes(tCliente clientes[], int *numeroClientes)
{
int i, numero, posicao;
if (*numeroClientes == 0)
{
    printf("Nao existem clientes inseridos!\n");
}
else
{
    printf("\nClientes Existentes:\n");
    listarClientes(clientes,*numeroClientes);
    printf("Indique o numero do cliente a eliminar\n");
    numero = lerInteiro(MIN_CLIENTES,MAX_CLIENTES);
    posicao= verificaSeClienteExiste(clientes,*numeroClientes,numero);
    if (posicao == -1)
    {
        printf("Esse cliente nao existe!\n");
    }
    else
    {
        for (i = posicao ; i < *numeroClientes-1 ; i++)
        {
            clientes[i] = clientes[i+1];
        }
        (*numeroClientes)--;
        printf("Cliente Eliminado!\n");
    }
}
}

Podem ajudar-me por favor!!! Obrigado

Edited by thoga31
GeSHi
Posted

sim e sei porque e como solucionar, mas por não teres apresentado o código correctamente, não irei responder até corrigires o teu primeiro post

O que está mal no código que apresentei?

Sim já vi desculpa tenho ali um do a mais, porque também tinha uma função que verifica se o número já existe ou não por isso tinha um do while

vou eliminar

já alterei

Posted

olha bem para oq ue apresentaste no teu primeiro post:

quando vou a inserir clientes a função entra em loop!!!

e agora fazes uma coisa destas ?

Sim já vi desculpa tenho ali um do a mais, porque também tinha uma função que verifica se o número já existe ou não por isso tinha um do while

vou eliminar

ou não sabes o que é uma estrutura de ciclo ou deves estar a gozar com as pessoas do fórum que estão a tentar ajudar ...

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

olha bem para oq ue apresentaste no teu primeiro post:

e agora fazes uma coisa destas ?

ou não sabes o que é uma estrutura de ciclo ou deves estar a gozar com as pessoas do fórum que estão a tentar ajudar ...

Acho que já percebi, tenho de tirar numeroAux=*numeroClientes+1 do ciclo certo?

Eu vou colocar como tinha a função inserir originalmente:

void inserirClientes(tCliente clientes[], int *numeroClientes)
{
   int posicao, numeroAux;
   if (*numeroClientes<MAX_CLIENTES)
   {
       do
       {
           numeroAux = *numeroClientes+1;
           posicao= verificaSeClienteExiste(clientes,*numeroClientes,numeroAux);
           if (posicao != -1)
           {
               printf("Esse numero ja existe! Escolha outro!\n");
           }
       }
       while(posicao != -1);
       clientes[*numeroClientes].numero=numeroAux;
       printf("Insira o nome do cliente:");
       lerString(clientes[*numeroClientes].nome,MAX_NOME);
       (*numeroClientes)++;
   }
   else
   {
       printf("Limite de clientes atingido: %d\n Nao pode inserir mais componentes.\n", MAX_CLIENTES);
   }
}
Edited by thoga31
GeSHi
Posted

Eu vou colocar como tinha a função inserir originalmente:

vês como não custa nada disponibilizares a informação relevante ao problema ?

sim, o problema está na geração do número a ser associado ao cliente. é óbvio que não pode ser o número de clientes existes.

a solução para por guardares o último número atribuído, agora, se o guardas fora da função ou dentro da função isso já é contigo.

solução de guardar o último valor atribuído dentro da função:

int inserirClientes(tCliente clientes[], int numeroClientes)
{
 int posicao;
 static int numero = 0; // <--------------------

 if (numeroClientes < MAX_CLIENTES)
 {
   while (verificaSeClienteExiste(clientes,
                                  numeroClientes,
                                  ++numero))
     /* void */;

   clientes[numeroClientes].numero = numero;
   printf("Insira o nome do cliente:");
   lerString(clientes[numeroClientes].nome, MAX_NOME);

   ++numeroClientes;
 }

 return numeroClientes;
}

numeroClientes = inserirClientes(clientes, numeroClientes);
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.