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

C语言Bingo游戏实现中如何避免数组查重时出现输出空白行

解决方案

问题根源

你的代码将用户输入读取逻辑放在了随机数去重的内层循环中,每生成一次重复值就会触发一次输入读取要求,随着已抽取数字增多,重复概率升高,需要按下回车的次数就会同步增加,进而出现空白行过多的问题。

修正思路

将用户输入检测和随机数生成逻辑拆分:

  • 单次读取用户输入,判断为q直接退出,判断为回车则启动随机数生成流程
  • 随机数去重的内层循环不做输入读取,直到生成合法未使用的数值后再输出

完整可运行代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

int main()
{
    srand(time(0));

    int rollcount = 0, rollc, rollr, basec=5, base=20;
    const char BINGO[5] = {'B','I','N','G','O'};
    bool check[101];
    int used_count = 1; // 初始空闲位已标记为使用,初始计数为1

    // 修正原代码for循环条件的大写I错误
    for(int i = 0; i < 100; i++) 
        check[i]=false;
    
    // 标记空闲位为已使用,对应数值100
    check[100]=true; 

    // 最多抽99个有效数字
    while(used_count < 100)
    {
        // 单次读取用户输入
        char input = getchar();
        if(input == 'q')
        {
            // 可在此处补充统计输出逻辑
            printf("游戏退出\n");
            return 0;
        }
        if(input != '\n')
        {
            // 非回车非q的输入直接跳过
            continue;
        }

        bool reroll = true;
        rollcount++;

        // 内层循环仅做随机数生成和去重,无需读取输入
        do  
        {
            rollc = rand() % basec;  // 随机选列
            rollr = rand() % base + 1; // 生成列内随机数
            rollr += (rollc * 20);  

            // 限制O列最大值为99
            if(rollr == 100)
                rollr = 99;

            if (check[rollr] == false)
            {
                printf("%d: %c-%d\n", rollcount, BINGO[rollc], rollr);
                check[rollr] = true;
                used_count++;
                reroll = false;
            }
        } while(reroll);
    }

    printf("所有数字已抽取完毕\n");
    return 0;
}

修改说明

  • 修正了原代码中for循环条件将小写i误写为大写I的编译错误
  • 移除了内层循环中的输入读取逻辑,单次回车触发后自动完成重复重试直到生成合法值
  • 新增抽取计数判断,抽满99个有效数字后自动终止程序
  • 输出内容新增换行符,符合预期的逐行显示格式
  • 优化了输入判断逻辑,非回车、非q的输入会直接忽略,避免误操作影响流程

内容的提问来源于stack exchange,提问作者Matthew Sechrist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:00:03