0
I’m having a problem in the last procedure of the following code, where the procedure receive Tring to make the comparison with another registered is being ignored and jumping straight to receive.
Could someone tell me why and how to solve?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct enderecoStruct
{
char rua[40];
char bairro[30];
int numero;
char cep[8];
char cidade[20];
char estado[20];
} Endereco;
typedef struct CadastroPessoaStruct
{
char nome[40];
char reg[13];
char rg[10];
char telefone[11];
Endereco end;
} Pessoa;
Pessoa *clientes;
int qtdClientes, tamClientes;
void removerQuebraLinha(char *string)
{
if(string != NULL && strlen(string) > 0)
{
short tamanho = strlen(string);
if(string[tamanho-1] == '\n')
{
string[tamanho-1] = '\0';
}
}
}
void receberString(char *string_destino, int quantidade_caracteres)
{
fgets(string_destino, quantidade_caracteres, stdin);
removerQuebraLinha(string_destino);
}
Pessoa receberCliente()
{
Pessoa p;
printf("Nome: ");
receberString(p.nome, 39);
printf ("CPF: ");
receberString(p.reg, 13);
fflush(stdin);
printf ("RG: ");
receberString(p.rg, 11);
fflush(stdin);
printf ("Telefone: ");
receberString(p.telefone, 12);
fflush(stdin);
p.end = receberEndereco();
system("cls");
sucesso();
return p;
}
Endereco receberEndereco()
{
Endereco e;
printf ("Rua: ");
receberString(e.rua, 39);
fflush(stdin);
printf ("Numero: ");
scanf("%5d", &e.numero);
fflush(stdin);
printf ("CEP: ");
receberString(e.cep, 9);
fflush(stdin);
printf ("Bairro: ");
receberString(e.bairro, 29);
printf ("Cidade: ");
receberString(e.cidade, 20);
printf ("Estado: ");
receberString(e.estado, 20);
system("cls");
sucesso();
return e;
}
void inserirCliente(Pessoa p)
{
if(qtdClientes == tamClientes)
{
tamClientes *= 1.5;
clientes = realloc(clientes, tamClientes*sizeof(Pessoa));
}
clientes[qtdClientes] = p;
qtdClientes++;
}
Pessoa *buscarCliente(char *cpf)
{
Pessoa *p = NULL;
int i;
for (i=0; i < qtdClientes; i++)
{
if(strcmp(clientes[i].reg, cpf) == 0)
{
p = &clientes[i];
break;
}
}
return p;
}
int main(int argc, char** argv)
{
char cpf[13];
printf("Digite os dados do cliente: ");
inserirCliente(receberCliente);
printf("CPF do cliente cadastrado");
receberString(cpf, 13);
(buscarCliente(cpf);
return 0;
}
Only with this stretch is there no way.
– Maniero
Is missing the
main
. Besides, you got a lot offflush(stdin)
. This generates undefined behavior, so your program can literally behave as you wish.– Pablo Almeida