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

如何修复C程序中‘expected expression before ‘EvidenceType’’错误

C结构体函数编译错误修复方案

问题重现

我定义了如下结构体:

typedef struct {    
  int   id;
  char  room[MAX_STR];
  char  device[MAX_STR];
  float value;
  int   timestamp;
} EvidenceType;

并编写了printEvidence()函数来打印结构体内容:

void printEvidence(EvidenceType*){

    char* thermal_string;
    char* sound_string;
    char* emf_string;
    
    int no_of_hours = floor(EvidenceType->timestamp / 3600);
    int no_of_minutes = floor((EvidenceType->timestamp % 3600) / 60);
    int no_of_seconds = EvidenceType->timestamp - (no_of_hours * 3600);
    no_of_seconds = no_of_seconds - (no_of_minutes * 60);
    
    printf("%4s |%25s |%10s |%16s |%10s\n", "ID", "Room", "Device", "Value", "Timestamp");
    
    if(strcmp(EvidenceType->device, "EMF") == 0){
    
        if(EvidenceType->value > 4.0){
        
            emf_string = "(HIGH)";
        }
        else{
        
            emf_string = "";
        }
        printf("%-4d |%25s |%10s |%7.1f%10s |%2d:%2d:%2d\n", EvidenceType->id, EvidenceType->room, EvidenceType->device, EvidenceType->value, emf_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
    else if(strcmp(EvidenceType->device, "THERMAL") == 0){
    
        if(EvidenceType->value < 0.0){
        
            thermal_string = "(COLD)";
        }
        else{
        
            thermal_string = "";
        }
        printf("%-4d |%25s |%10s |%7.2f%10s |%2d:%2d:%2d\n", EvidenceType->id, EvidenceType->room, EvidenceType->device, EvidenceType->value, thermal_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
    else{
    
        if(EvidenceType->value < 35.0){
        
            sound_string = "(WHISPER)";
        }
        else if(EvidenceType->value > 70.0){
        
            sound_string = "(SCREAM)";
        }
        else{
        
            sound_string = "";
        }
        printf("%-4d |%25s |%10s |%7.1f%10s |%2d:%2d:%2d\n", EvidenceType->id, EvidenceType->room, EvidenceType->device, EvidenceType->value, sound_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
}

在main函数中调用方式:

EvidenceType a;
printEvidence(&a);

编译时出现错误:

In function ‘printEvidence’:
error: expected expression before ‘EvidenceType’
int no_of_hours = floor(EvidenceType->timestamp / 3600);

错误原因

printEvidence函数的参数只声明了类型EvidenceType*,但没有给参数命名。EvidenceType是结构体的类型名,不是变量名,不能用->操作符直接访问成员。必须给参数指定一个变量名,才能通过这个变量访问结构体成员。

修复后的代码

给函数参数添加变量名(比如ev),并将函数内所有EvidenceType->替换为ev->,同时补充了一些细节优化:

#include <math.h>   // 引入floor函数所需头文件
#include <string.h> // 引入strcmp函数所需头文件

void printEvidence(EvidenceType* ev){ // 添加参数名ev

    char* thermal_string = ""; // 初始化指针,避免未定义行为
    char* sound_string = "";
    char* emf_string = "";
    
    // 用3600.0/60.0确保浮点运算,避免整数除法截断
    int no_of_hours = floor(ev->timestamp / 3600.0);
    int no_of_minutes = floor((ev->timestamp % 3600) / 60.0);
    int no_of_seconds = ev->timestamp - (no_of_hours * 3600) - (no_of_minutes * 60);
    
    printf("%4s |%25s |%10s |%16s |%10s\n", "ID", "Room", "Device", "Value", "Timestamp");
    
    if(strcmp(ev->device, "EMF") == 0){
        if(ev->value > 4.0){
            emf_string = "(HIGH)";
        }
        // 用%02d保证时间格式补零,输出更规范
        printf("%-4d |%25s |%10s |%7.1f%10s |%02d:%02d:%02d\n", ev->id, ev->room, ev->device, ev->value, emf_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
    else if(strcmp(ev->device, "THERMAL") == 0){
        if(ev->value < 0.0){
            thermal_string = "(COLD)";
        }
        printf("%-4d |%25s |%10s |%7.2f%10s |%02d:%02d:%02d\n", ev->id, ev->room, ev->device, ev->value, thermal_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
    else{
        if(ev->value < 35.0){
            sound_string = "(WHISPER)";
        }
        else if(ev->value > 70.0){
            sound_string = "(SCREAM)";
        }
        printf("%-4d |%25s |%10s |%7.1f%10s |%02d:%02d:%02d\n", ev->id, ev->room, ev->device, ev->value, sound_string, no_of_hours, no_of_minutes, no_of_seconds);
    }
}

内容的提问来源于stack exchange,提问作者Girly Girl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:32:05