Home > Software engineering >  Error 'listaCliente' undeclared (first use in this function)
Error 'listaCliente' undeclared (first use in this function)

Time:05-23

I can't run the code because it gives the error mentioned in the title, but I declared it in main. I'm stuck for a few hours and I can't solve this

main.c , here is where I declare the "listaCliente"

int main()
{
    Cliente* listaCliente = lerBaseDeDados();

    menuPrincipal(listaCliente);
}

Cliente.c // menu , basically this is going to be a menu to manage clients (add remove consult), but I don't understand why it's giving me an error in the line menuPrincipal(listaCliente);

void submenuGGestaoClientes() 
{
    int continuar=-1;
    int aux=-1;
    do {
        printf("---------------- Gestao Clientes ----------------\n\n");
        printf("1- Adicionar Cliente\n");
        printf("2- Remover Cliente \n");
        printf("3- Consultar Clientes \n");
        printf("0- Retroceder \n\n");
        printf("-------------------------------------------------\n");

        do
        {
            fflush(stdin);
            if(scanf("%d", &aux) != 0){
                continuar = aux;
            }
            if(continuar < 0 || continuar > 3) {
                system("cls || clear");
                printf("erro, opcao invalida!\n");
                
                printf("---------------- Gestao Clientes ----------------\n\n");
                printf("1- Adicionar Cliente\n");
                printf("2- Remover Cliente \n");
                printf("3- Consultar Clientes \n");
                printf("0- Retroceder \n\n");
                printf("-------------------------------------------------\n");
            }
        } while(continuar < 0 || continuar > 3 );

        switch(continuar)
        {
            case 1:
                adicionar(listaCliente);
                break;

            case 2:
                printf("Arroz");
                break;
            
            case 3:
                printf("Arroz");
                break;
                
            case 0:
                menuPrincipal(listaCliente); //where have the 1º error
                break;

            default:
                printf("Digite uma opcao valida\n");
                break;
            
        }

        printf("\n");
        system("pause");
        
    } while(continuar != 0);
}

Cliente.c function "adicionar" basically it's a function that will add the customer data

void adicionar(Cliente* listaCliente) {
    Cliente* novoCliente = (Cliente*)calloc(1, sizeof(Cliente));
    int auxInt = -1;
    char auxNome, auxMorada;
    int escolha = -1;

    //Menu para escolher o tipo do contentor, a resposta e recolhida com um switch case 
    printf("Digite o nome do Cliente: \n");
    scanf("%c", &auxNome);
    novoCliente->nome = auxNome;
    
    printf("Digite o numero de cartao do cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cartao = auxInt;
        }
        if(auxInt < 0 ) {
            printf("erro, Numero de cartao invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite o numero de cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cliente = auxInt;
        }
        if(auxInt < 0 ) {
            printf("erro, Numero de cliente invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite o numero de contribuinte do cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cartao = auxInt;
        }
        if(auxInt < 0 || auxInt > 9999999) {
            printf("erro, Numero de Contribuinte invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite a morada do Cliente: \n");
    scanf("%c", &auxMorada);
    novoCliente->morada = auxMorada;
    
    listaCliente = adicionarCliente(listaCliente, novoCliente);

    printf("\nAdicionado com sucesso!\n");
}

CodePudding user response:

At least within the function submenuGGestaoClientes declared like

void submenuGGestaoClientes();

there is used the undeclared name listaCliente:

adicionar(listaCliente);

or

menuPrincipal(listaCliente);

Maybe you mean the following function declaration

void submenuGGestaoClientes( Cliente* listaCliente );

Pay attention to that such a call

fflush(stdin);

has undefined behavior. Remove such statements.

Also rewrite this call of scanf

scanf("%c", &auxNome);

like

scanf(" %c", &auxNome);
      ^^^^

The leading space in the format string allows to skip white space characters in the input buffer.

  • Related