CS50 P-Set3 Runoff作业:print_winner函数测试报错求助
问题分析与修复
你的代码中print_winner函数存在两处问题,直接导致了测试失败:
多数票判定逻辑冗余且易出错
你用round(voter_count / 2 + 1)计算多数票,但整数除法本身会向下取整,再叠加round完全多余。更准确的判定逻辑应该是得票数严格超过选民总数的一半,直接通过candidates[i].votes > voter_count / 2即可实现,既简洁又避免整数运算误差。输出格式不符合测试要求
打印获胜者名字时,你使用printf("%s", name);,但测试期望输出的名字后必须带换行符。缺少换行符会导致输出内容不完整,被测试判定为未正确打印获胜者。
修改后的print_winner函数
bool print_winner(void) { for (int i = 0; i < candidate_count; i++) { if(candidates[i].votes > voter_count / 2) { printf("%s\n", candidates[i].name); return true; } } return false; }
补充说明
- 多数票的核心要求是得票超过半数:比如10个选民需要至少6票,5个选民需要至少3票。用
> voter_count / 2在整数除法下刚好能准确匹配这个逻辑(10/2=5,6>5;5/2=2,3>2)。 - 换行符
\n是测试验证输出的必要格式要求,必须添加。
内容的提问来源于stack exchange,提问作者Nafis Islam
相关产品推荐
相关产品推荐

