Error 'listaCliente' undeclared(首次在此函数中使用)

Error 'listaCliente' undeclared (first use in this function)

我不能运行代码因为它给出了标题中提到的错误,但我在main中声明了它。卡了几个小时没解决

main.c ,这里是我声明“listaCliente”的地方

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

    menuPrincipal(listaCliente);
}

Cliente.c // menu ,基本上这将是一个管理客户的菜单(添加删除咨询),但我不明白为什么它在 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 函数“adicionar”基本上是一个添加客户数据的函数

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");
}

至少在函数内 submenuGGestaoClientes 声明为

void submenuGGestaoClientes();

使用了未声明的名称listaCliente:

adicionar(listaCliente);

menuPrincipal(listaCliente);

也许你指的是下面的函数声明

void submenuGGestaoClientes( Cliente* listaCliente );

注意是这样的调用

fflush(stdin);

有未定义的行为。删除此类语句。

也重写scanf

的这个调用
scanf("%c", &auxNome);

喜欢

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

格式字符串中的前导 space 允许跳过输入缓冲区中的白色 space 字符。