You need to enable JavaScript to run this app. CS50 plurality作业C语言字符串==比较逻辑未触发问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

CS50 plurality作业C语言字符串==比较逻辑未触发问题咨询

问题根因及修复方案

1. 核心错误:字符串比较方式不对

C 语言中的string本质是字符指针char *,直接使用==运算符比较的是两个指针指向的内存地址,而非指针指向的字符串内容。你打印的两个字符串内容虽然一致,但存储在不同的内存空间,所以==判断永远为假,计票分支永远不会触发。
正确做法是引入<string.h>标准库,使用strcmp函数做字符串比较:两个字符串内容完全一致时,strcmp返回值为0,判断条件改为:

if (strcmp(name, candidates1[a].names) == 0)

2. 其他需要修正的错误

  • 数组名不匹配:函数形参定义的候选人数组名为candidates1,但你计票时访问的是candidates[a].votes,属于非法内存访问,是后续输出(null)、票数为0的核心原因之一,需要统一为形参名candidates1。
  • 冗余判断无效:你的for循环条件是a < candidatecount,循环体内a永远不可能等于candidatecount,if (candidatecount == a)分支永远不会执行,可以直接删除。
  • 返回值类型不匹配:函数要求返回bool类型,你最后return(name);返回的是字符指针,类型错误。正确逻辑是找到匹配的候选人、完成计票后直接return true;,整个循环遍历结束仍未找到匹配的候选人再return false;。

修正后的参考代码

#include <string.h>

// Update vote totals given a new vote
bool vote(string name, int candidatecount, candidate candidates1[MAX])
{
    for (int a = 0; a < candidatecount; a++)
    {
        if (strcmp(name, candidates1[a].names) == 0)
        {
            candidates1[a].votes += 1;
            return true;
        }
        printf("%s, %s\n", candidates1[a].names, name);
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:54:03