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

如何修复C语言中‘无类型参数列表仅允许在函数定义中使用’的编译错误

修复Vote函数的编译错误与逻辑问题

首先,先拆解你遇到的编译错误:

a parameter list without types is only allowed in a function definition
int strcmp(cn, name);
^

这个错误是因为你在vote函数里写了int strcmp(cn, name);——这行代码看起来像是在声明一个新的strcmp函数,但你没有给参数指定类型(比如正确的声明应该是int strcmp(const char *a, const char *b);)。而实际上,strcmp是C标准库<string.h>里的内置函数,你不需要重新声明它,直接调用即可。

除此之外,你的vote函数还有几个逻辑问题,我来一步步帮你修正:

原代码的问题梳理

  1. 未初始化的变量i:你在int i;之后直接写string cn = candidates[i].name;,此时i是未赋值的垃圾值,会导致访问非法内存。
  2. 循环起始下标错误:数组下标是从0开始的,你的循环从i=1开始,会跳过第一个候选人(candidates[0])。
  3. 错误的strcmp使用方式:你没有保存strcmp的返回值,也没有用它做判断,反而试图“声明”这个函数。
  4. 返回值逻辑错误:你直接返回strcmp(函数名本身),这不是合法的bool值,完全不符合投票验证的逻辑。

修复后的完整代码

首先,确保你已经包含了<string.h>和<stdbool.h>头文件(strcmp和bool类型分别依赖它们):

#include <string.h>
#include <stdbool.h>
// 你的全局结构体定义、MAX宏定义等代码...

然后,修正后的vote函数如下:

bool vote(string name) {
    // 遍历所有候选人(数组下标从0开始)
    for (int i = 0; i < MAX; i++) {
        // strcmp返回0表示两个字符串完全相等
        if (strcmp(candidates[i].name, name) == 0) {
            // 找到匹配的候选人,票数+1
            candidates[i].votes++;
            // 验证成功,返回true
            return true;
        }
    }
    // 遍历完所有候选人都没找到匹配,返回false
    return false;
}

代码功能说明

  • 循环从i=0开始,覆盖数组里的所有候选人(下标0到MAX-1),不会遗漏任何一个。
  • 每次循环调用strcmp比较输入名字和当前候选人的名字,返回0时说明两者完全一致。
  • 找到匹配项后,立刻给该候选人的票数加1,并返回true(表示投票有效)。
  • 如果循环结束都没找到匹配,返回false(表示投票无效)。

这样既修复了编译错误,也让函数实现了正确的投票验证功能~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:33:11