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

GCC编译C随机数排序代码报错expected ‘;’, ‘,’ or ‘)’ before ‘{’如何解决

编译报错修复方案

明确的语法错误点

你代码里存在几处易被忽略的语法问题,直接导致了当前编译报错:

  • tri.c 内分号缺失:Tri_Insertion 函数中 j=i-1 语句末尾没有添加分号,修改为:
    j = i - 1;
    
  • main.c 内scanf参数缺失逗号:询问是否重启的输入语句中,格式字符串和变量参数之间缺了逗号,修改为:
    scanf("%d", &k);
    
  • 头文件声明校验:大概率你项目中的 tri.h 头文件内的函数声明末尾缺失分号,比如如果你的 tri.h 里写的是:
    // 错误写法,末尾无分号
    void Tri_Insertion(int *T, int n, char choix)
    void Tri_Selection(int *T, int n, char choix)
    
    需要修改为末尾带分号的正确声明格式:
    void Tri_Insertion(int *T, int n, char choix);
    void Tri_Selection(int *T, int n, char choix);
    

以上三处修改完成后,当前的expected ‘;’, ‘,’ or ‘)’ before ‘{’ token报错会消失。

其他需要修正的问题

修复编译问题后还需要调整以下逻辑问题才能正常运行:

  • 字符输入缓冲区残留问题:输入排序方式的scanf("%c", &e)会读到前一个scanf("%d",&d)残留的换行符,导致直接跳过输入,需要修改为:
    scanf(" %c", &e); // 格式符前加空格,自动跳过空白字符
    
  • 插入排序逻辑错误:你当前插入排序的交换逻辑写的是*(T+j+1)=*(T+i);,应该改为*(T+j+1)=*(T+j);,否则排序结果会出错。
  • 选择排序参数错误:Tri_Selection函数中调用PlusPetitD、PlusGrandD时传入的ie、e是局部未初始化变量,如果这两个函数需要返回下标值,需要传入指针类型参数,否则无法拿到正确的下标执行交换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:09:02