You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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; 点运算符后漏掉了结构体成员名,属于书写错误。

具体修复步骤

  1. 把结构体数组改为全局变量,方便所有子函数访问:将main函数内的Cadastro cadastro[SIZE];移动到全局变量声明区,即int opcao = 0, opt;的下一行。
  2. 替换所有子函数内的结构体访问写法:将所有Cadastro[i].xxx全部替换为cadastro[i].xxx(用小写的变量名,而非大写的类型名)。
  3. 修复cadastrar函数内的语法错误:将Cadastro[pos]. = cod;改为cadastro[pos].cod = cod;。
  4. 修复其他配套问题:
    • 统一函数声明与定义:你提前声明的是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:30:06