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

C语言猜数字游戏:saveScore函数异常终止及排行榜功能求助

问题排查与修复方案

核心问题分析

程序无法终止大概率是因为文件资源未正确释放或存在死循环。针对你描述的saveScore函数场景,最常见的问题是:

  • 打开文件后未调用close(),导致文件句柄持续占用,程序无法正常退出
  • 读取文件内容时使用了无终止条件的循环(比如while True未正确触发break)

修复后的saveScore函数实现

以下是符合需求的完整实现,同时解决程序无法终止的问题:

def saveScore(guess_count, target_num):
    # 初始化排行榜列表
    leaderboard = []
    
    # 1. 读取原有数据(用with语句自动管理文件,避免资源泄漏)
    try:
        with open('leaderboard.txt', 'r') as f:
            for line in f:
                # 解析每行数据,假设格式为"猜测次数 猜中数字"
                count, num = line.strip().split()
                leaderboard.append((int(count), int(num)))
    except FileNotFoundError:
        # 文件不存在时直接跳过读取,使用空列表
        pass
    
    # 2. 添加新记录
    leaderboard.append((guess_count, target_num))
    
    # 3. 按猜测次数升序排序,次数相同则按数字排序(可选)
    leaderboard.sort(key=lambda x: (x[0], x[1]))
    
    # 4. 保留前10条记录
    if len(leaderboard) > 10:
        leaderboard = leaderboard[:10]
    
    # 5. 写入文件(同样用with语句自动关闭)
    with open('leaderboard.txt', 'w') as f:
        for entry in leaderboard:
            f.write(f"{entry[0]} {entry[1]}\n")

关键修复点说明

  • 使用with语句操作文件:无需手动调用close(),Python会在代码块结束后自动释放文件资源,彻底避免因文件句柄未关闭导致的程序无法终止问题
  • 移除可能的死循环:原代码如果用while循环读取文件且未正确终止,改用for line in f的方式安全遍历文件内容
  • 异常处理:处理文件不存在的情况,避免程序崩溃
  • 明确的排序与截断逻辑:确保只保留前10条最优记录

验证方法

运行游戏并完成一局后,检查:

  1. 程序是否能正常退出
  2. leaderboard.txt是否正确写入新记录,且只保留前10条按猜测次数升序的记录

内容的提问来源于stack exchange,提问作者Enno Mühlbauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:42:17