CS50 problem set 3 plurality代码本地正常 check50编译失败求解决
CS50 Problem Set 3 Plurality 编译错误修复方案
错误原因
check50检测plurality作业时,会按照作业要求的标准接口编译你的代码,你提交的代码没有实现作业强制要求的两个核心函数:
bool vote(string name):处理投票逻辑,存在对应候选人返回true,否则返回falsevoid print_winner(void):统计得票并输出所有获胜者
你把所有逻辑都写在了main函数中,check50编译时找不到上述两个必填函数,直接触发编译失败报错。你本地运行正常是因为本地编译不需要对接check50的测试调用逻辑,不代表符合作业提交规范。
修复后的完整代码
#include <stdio.h> #include <string.h> #include <cs50.h> #include <stdbool.h> // 作业预设的候选人最大数量 #define MAX 9 // 作业预设的候选人结构体 typedef struct { string name; int votes; } candidate; // 全局候选人数组 candidate candidates[MAX]; // 候选人数量 int candidate_count; // 作业要求必须实现的函数声明 bool vote(string name); void print_winner(void); int main(int argc, string argv[]) { // 检查参数合法性 if (argc < 2) { printf("Usage: plurality [candidate ...]\n"); return 1; } candidate_count = argc - 1; if (candidate_count > MAX) { printf("Maximum number of candidates is %i\n", MAX); return 2; } // 初始化候选人数组 for (int i = 0; i < candidate_count; i++) { candidates[i].name = argv[i + 1]; candidates[i].votes = 0; } int voter_count = get_int("Number of voters: "); // 遍历所有投票者 for (int i = 0; i < voter_count; i++) { string name = get_string("Vote: "); // 调用vote函数处理投票,无效投票输出提示 if (!vote(name)) { printf("Invalid vote.\n"); } } // 输出获胜者 print_winner(); } // 实现vote函数:匹配候选人姓名,匹配成功得票+1返回true,否则返回false bool vote(string name) { for (int i = 0; i < candidate_count; i++) { if (strcmp(candidates[i].name, name) == 0) { candidates[i].votes++; return true; } } return false; } // 实现print_winner函数:输出所有得票最高的候选人 void print_winner(void) { // 先找最高得票数 int max_votes = 0; for (int i = 0; i < candidate_count; i++) { if (candidates[i].votes > max_votes) { max_votes = candidates[i].votes; } } // 输出所有得票等于最高得票数的候选人 for (int i = 0; i < candidate_count; i++) { if (candidates[i].votes == max_votes) { printf("%s\n", candidates[i].name); } } return; }
关键修改说明
- 按照作业要求补充了预设的结构体、全局变量、
vote和print_winner两个必填函数,满足check50的编译接口要求 - 补充了无效投票的提示逻辑,符合作业功能要求
- 优化了获胜者统计逻辑,支持平局场景下输出所有获胜候选人
- 移除了冗余的头文件引入(原代码重复引入两次string.h,还引入了没用的math.h、ctype.h)
内容的提问来源于stack exchange,提问作者michael_fraser1201
相关产品推荐
相关产品推荐

