You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:15:55