C语言报expected expression before 'Cadastro' Struct相关错误如何解决
错误原因及修复方案
核心报错error: expected expression before 'Cadastro'原因
- 你混淆了结构体类型名和结构体变量名:你用typedef定义的
Cadastro是结构体的类型名(作用和int、char类似),不是可以直接访问的变量。你在main函数内定义的结构体数组变量名为小写的cadastro,且该变量是main的局部变量,其他函数无权访问。
第二个报错expected indetifier or '(' before '[' token原因
- cadastrar函数内存在语法错误:
Cadastro[pos]. = cod;点运算符后漏掉了结构体成员名,属于书写错误。
具体修复步骤
- 把结构体数组改为全局变量,方便所有子函数访问:将main函数内的
Cadastro cadastro[SIZE];移动到全局变量声明区,即int opcao = 0, opt;的下一行。 - 替换所有子函数内的结构体访问写法:将所有
Cadastro[i].xxx全部替换为cadastro[i].xxx(用小写的变量名,而非大写的类型名)。 - 修复cadastrar函数内的语法错误:将
Cadastro[pos]. = cod;改为cadastro[pos].cod = cod;。 - 修复其他配套问题:
- 统一函数声明与定义:你提前声明的是
void cadastroP(int cod,int pos);,实际定义的是void cadastrar(int cod, int pos),调用时还没有传参,需将声明改为void cadastrar();匹配调用逻辑。 - 补全printf的格式占位符:所有打印语句漏了占位符,例如
printf("\nNome do paciente:", cadastro[i].nome_paciente);要改为printf("\nNome do paciente: %s", cadastro[i].nome_paciente);,整型、浮点型对应添加%d、%f占位符。 - 替换废弃的
gets()函数为fgets(),避免缓冲区溢出风险。 - 不要在子函数内调用
main(),这不符合C语言规范,删除该语句,改为将opcao赋值为0即可返回主菜单。 - 修复无效选项判断逻辑:将
if(opcao<0 && opcao>6)改为if(opcao<0 || opcao>6),原逻辑用逻辑与永远无法触发。
- 统一函数声明与定义:你提前声明的是
内容的提问来源于stack exchange,提问作者DiogoCarv
相关产品推荐
相关产品推荐

