CCC 2021 J2问题C语言实现求助:输出重复名字问题修复
修复CCC 2021 J2问题中的C语言代码错误
你的代码存在几个关键问题,导致输出重复名字的问题,以下是问题分析和修复方案:
- 名字存储类型错误:
char name;只能存单个字符,而名字是多字符的字符串,需要用字符数组(比如char winner_name[50];),同时用get_string()读取名字,而非get_char()。 - 循环次数错误:原循环
for (i = N; i >= 0; i = i - 1)会执行N+1次(比如N=3时会跑4轮),但题目要求是N轮出价,应改成for (int i = 0; i < N; i++)或for (i = N; i > 0; i--),确保仅执行N次。 - 未同步更新最高出价者名字:当当前出价超过
max_bid时,只更新了出价,没保存对应的名字,导致最后输出的是最后一次输入的名字,而非最高出价者的名字。 - 输出格式错误:
printf("%c\n.", name);的格式符%c对应单个字符,和字符串名字不匹配,且多余了.,应使用%s输出字符串。
修复后的完整代码:
#include <cs50.h> #include <stdio.h> #include <string.h> // 用于strcpy字符串复制函数 int main(void) { int N = get_int("rounds: "); int max_bid = -1; char winner_name[50] = ""; // 初始化获胜者名字数组 for (int i = 0; i < N; i++) { int current_bid = get_int("input: "); char *current_name = get_string("name: "); if (current_bid > max_bid) { max_bid = current_bid; strcpy(winner_name, current_name); // 更新获胜者名字 } } printf("%s\n", winner_name); }
说明:
- 用字符数组
winner_name存储最高出价者的名字,get_string()能正确读取完整的名字字符串。 - 循环调整为标准的N次迭代,符合题目要求的轮数。
- 每次检测到更高出价时,通过
strcpy()将当前名字复制到winner_name,保证最终存储的是正确的获胜者信息。 - 输出语句使用
%s格式符,正确打印字符串类型的名字。
内容的提问来源于stack exchange,提问作者Jack2w
相关产品推荐
相关产品推荐

