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条最优记录
验证方法
运行游戏并完成一局后,检查:
- 程序是否能正常退出
leaderboard.txt是否正确写入新记录,且只保留前10条按猜测次数升序的记录
内容的提问来源于stack exchange,提问作者Enno Mühlbauer
相关产品推荐
相关产品推荐

