全部评论 4

  • 你的代码存在一些问题:

    1. cin 输入异常未处理,可能导致程序卡死/行为异常。
      choicelevelguess 都直接 cin >>;若输入字母等非数字,cin 会进入失败状态,后续读取持续失败。应检查 cin.fail(),并 clear() + ignore()

    2. 难度输入没有范围校验。
      输入 0、5、100 等都会进入 game(),而除了 2/3/4 外全部默认成“简单”难度,与菜单要求的 1–4 不符。

    3. 计分规则与实际代码不一致(差 1 次)。
      说明写的是“剩余次数 × 10”,但代码:

      (maxAttempts-cnt+1)*10
      

      例如简单模式最后一次才猜中,实际已经剩余 0 次,代码却给 10 分。若严格按说明,应检查是否应为 (maxAttempts-cnt)*10

    4. 随机数初始化位置不合理。
      srand(time(0)) 放在 game() 内,每次开始游戏重新播种;同一秒启动时会产生相同随机序列。通常应在 main() 中只执行一次。

    5. rand() % range 并非严格均匀随机。
      尤其“地狱”有 9001 个可能值,而 Windows 常见 RAND_MAX 较小,取模偏差会比较明显。建议使用 std::mt19937 + uniform_int_distribution<int>

    6. 排行榜文件读取缺少合法性检查。
      file >> n 以及玩家三个字段读取后都没有判断是否成功。ranking.txt 若损坏、缺字段或首行非法,可能加载错误数据甚至产生异常行为。

    7. “名字不超过10个字符”实际上没有实现。
      代码没有检查 name.length();此外 cin >> name 不支持带空格的名字

    8. 保存失败却仍提示“成绩已记录”。
      saveRanking() 打不开文件时直接 return,调用方完全不知道失败,但后面仍输出“成绩已记录到排行榜”。

    此外还有几个次要问题:printLoading() 从未调用;#include <algorithm> 当前未使用;多处 intvector::size() 的无符号类型比较会产生编译警告;windows.hconio.hSleepSetConsoleTextAttributesystem("cls") 等使程序只能面向 Windows,跨平台性较差

    3天前 来自 浙江

    0
    • 【注】其中3个问题由GPT-5.6指出,其余为本人发现。仅供参考。

      3天前 来自 浙江

      0
  • 恭喜你学会了交互题写法,你可以 AK NOI 了

    1周前 来自 浙江

    0
  • 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

    1周前 来自 广西

    0
  • 6666666666666666

    1周前 来自 广西

    0

热门讨论