Procedures nested in C being ignored by the previous procedure

Asked

Viewed 66 times

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.

  • 1

    Is missing the main. Besides, you got a lot of fflush(stdin). This generates undefined behavior, so your program can literally behave as you wish.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.