Boa noite!
Iniciei a pouco tempo o curso de programação e resolvi fazer esse programa para fins acadêmicos, eu gostaria que esse programa não cadastrar-se ninguém se o ID do cliente já estiver em uso, porém o programa ignora meu loop e não identifica isso, alguém consegue me ajudar? Desde já agradeço. Gostaria de verificar a parte do - Lista *cadastro_novosclientes(Lista *novo).
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <stdbool.h>
#include <string.h>
#include <locale.h>
typedef struct Lista
{
char pessoa[50];
char cpf[15];
int idade;
unsigned long int iden;
struct Lista *proximo;
}Lista;
//valores dos pratos
float a = 25.00;
float b = 15.00;
float c = 65.80;
float comprado = 0;//para atualizar o valor que o cliente deve
//declaraçaõ de funções
Lista* cadastro_novosclientes(Lista* novo);
void imprima(Lista *novo);
void prato(Lista *novo, int x);
int main(void)
{
setlocale(LC_ALL, "Portuguese"); //ACRESCENTANDO A LINGUA PORTUGUESA NO PROGRAMA
Lista *novo = NULL; // Ponteiro para percorrer aos dados mais tarde
int x; //receber o ID do cliente que comprou
char resposta; //verificar se é um novo cliente ou não
//Garante que só saia dessa pagina se for dado o comando de finalização
while(resposta != 'S')
{
printf(" _________________________________________\n");
printf("| MENU |\n");
printf("|_________________________________________|\n");
printf("|(N) NOVO CADASTRO |\n");
printf("|(P) JA CADASTRADO |\n");
printf("|(l) LISTAR CLIENTES |\n");
printf("|(S) FINALIZAR |\n");
printf("|_________________________________________|\n");
fflush(stdin);
resposta = getch();
resposta = toupper(getch()); // para não ter problema caso a resposta seja em maiusculo ou não
switch(resposta) //começando o processamento
{
case 'N':
system("cls"); // limpar a tela
printf("------------------------------------------\n");
printf(" CADASTRO \n");
printf("------------------------------------------\n");
novo= cadastro_novosclientes(novo);
getch();
system("cls");
break;
case 'P':
printf("Qual o ID: ");
scanf("%i", &x);
fflush(stdin);
prato(novo, x);
getch();
system("cls");
break;
case 'L':
system("cls");
printf("------------------------------------------\n");
printf(" Clientes já cadastrados \n");
printf("------------------------------------------\n");
imprima(novo);
getch();
system("cls");
break;
default:
//se for dado um caractere invalido não retornar nada
system("cls");
}
}
}
Lista *cadastro_novosclientes(Lista *novo)
{
Lista dados;
Lista *p = novo;
bool identificar = false;
printf("Nome:");
fgets(dados.pessoa, 50, stdin);
printf("Qual a idade: ");
scanf("%i", &dados.idade);
fflush(stdin);
printf("Qual o CPF: ");
fgets(dados.cpf, 15, stdin);
printf("Qual a identificação: ");
scanf("%u", &dados.iden);
fflush(stdin);
//verificar se meu número de identificação já existe
for(p=novo; p!=NULL; p= p->proximo){
if(p->iden==dados.iden){
bool identificador= true;
break;
}
}
//salvando os novos dados
if(!identificar)
{
Lista *novos_dados = (Lista*)malloc(sizeof(Lista));
strcpy(novos_dados -> pessoa, dados.pessoa);
novos_dados -> idade = dados.idade;
strcpy(novos_dados -> cpf, dados.cpf);
novos_dados -> iden = dados.iden;
novos_dados -> proximo = novo;
printf("------------------------------------------\n");
printf(" Cadastro finalizado \n");
printf("------------------------------------------\n");
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU\n");
return novos_dados;
}
else
{
printf("Número de identificação já cadastrado");
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU\n");
return novo;
}
}
void prato(Lista *novo, int x)
{
char n; //identificar o input do usuario
Lista *p;
for(p = novo; p != NULL; p -> proximo)
{
if(p -> iden == x)
{
printf("Qual prato %s comprou? A, B ou ", p -> pessoa);
n = getch();
n = toupper(getch());
switch(n)
{
case 'A':
comprado += a;
printf("\n");
printf("%s tem que pagar %.2f\n", p -> pessoa, comprado);
comprado = 0;
break;
case 'B':
comprado += b;
printf("\n");
printf("%s tem que pagar %.2f\n", p -> pessoa, comprado);
comprado = 0;
break;
case 'C':
comprado += c;
printf("\n");
printf("%s tem que pagar %.2f\n", p -> pessoa, comprado);
comprado = 0;
break;
}
printf("\n\n PRESSIONE QUALQUER PLACA PARA VOLTAR AO MENU\n");
return;
}
}
}
void imprima(Lista *novo)//imprime os nomes ja cadastrados
{
Lista *p;
for(p = novo; p != NULL; p = p -> proximo)
{
printf(" NOME: %s\n", p -> pessoa);
printf(" ID: %i Idade: %u", p -> iden, p -> idade);
printf(" CPF: %s\n", p -> cpf);
printf("------------------------------------------\n");
}
printf("\n\n PRESSIONE QUALQUER PLACA PARA VOLTAR AO MENU\n");
}