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
相关产品推荐
相关产品推荐

