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

