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 字符。
我不能运行代码因为它给出了标题中提到的错误,但我在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 字符。