satbr Posted February 11, 2014 at 04:37 PM Report #544857 Posted February 11, 2014 at 04:37 PM (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 February 11, 2014 at 06:46 PM by thoga31 GeSHi
HappyHippyHippo Posted February 11, 2014 at 04:40 PM Report #544858 Posted February 11, 2014 at 04:40 PM 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 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
satbr Posted February 11, 2014 at 04:49 PM Author Report #544859 Posted February 11, 2014 at 04:49 PM 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
HappyHippyHippo Posted February 11, 2014 at 04:52 PM Report #544861 Posted February 11, 2014 at 04:52 PM 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 Portugol Plus
satbr Posted February 11, 2014 at 05:00 PM Author Report #544863 Posted February 11, 2014 at 05:00 PM (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 February 11, 2014 at 06:47 PM by thoga31 GeSHi
HappyHippyHippo Posted February 11, 2014 at 05:12 PM Report #544866 Posted February 11, 2014 at 05:12 PM 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 Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now