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

C语言基于while循环与isdigit验证的猜数字游戏开发求助

C语言猜数字游戏实现方案

原有代码核心问题修复点

  • 输入存储越界问题:原代码用单个char类型存储用户输入,输入超过1个字符时会发生内存越界导致程序崩溃,替换为长度足够的字符数组存储输入字符串
  • 多位数输入支持:新增逐字符校验逻辑,遍历输入字符串每个字符用isdigit()校验是否为数字,全为数字后再合并转换为int类型,支持1~20范围内的多位数输入
  • 随机数生成逻辑修复:原srand(1-10)等价于固定种子,随机数不会变化,改为调用time()函数传入当前时间作为种子,保证每次运行生成的随机数不同
  • 循环逻辑简化:删除冗余的outOfGuess变量,直接用剩余猜测次数作为循环判断条件,逻辑更清晰易读
  • 输入范围校验:新增数值范围判断,转换后的数字不在1~20区间时直接提示用户,符合需求要求

修正后完整代码

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

int main()
{
    // 生成1~20的随机数
    srand(time(NULL));
    int iRandomNum = (rand() % 20) + 1;
    char input_buf[32]; // 存储用户输入的字符串
    int guessCount = 0;
    const int guessLimit = 3;
    int guessNum;
    int input_valid;

    while (guessCount < guessLimit) {
        printf("\n你还有%d次猜测机会", guessLimit - guessCount);
        printf("\n请输入1~20之间的数字:");
        scanf("%s", input_buf);

        input_valid = 1;
        // 逐字符校验是否为数字
        for (int i = 0; input_buf[i] != '\0'; i++) {
            if (!isdigit(input_buf[i])) {
                input_valid = 0;
                break;
            }
        }

        if (!input_valid) {
            printf("输入非法,请输入1~20之间的数字!\n");
            guessCount++; // 若不需要非法输入扣次数可注释该行
            continue;
        }

        // 字符串转整数
        guessNum = atoi(input_buf);
        // 校验数值范围
        if (guessNum < 1 || guessNum > 20) {
            printf("输入超出范围,请输入1~20之间的数字!\n");
            guessCount++; // 若不需要范围错误扣次数可注释该行
            continue;
        }

        // 判断猜测结果
        if (guessNum == iRandomNum) {
            printf("恭喜你猜对了!\n");
            return 0;
        } else if (guessNum > iRandomNum) {
            printf("猜大了!\n");
        } else {
            printf("猜小了!\n");
        }
        guessCount++;
    }

    // 次数用尽退出
    printf("\n次数用尽,你输了!正确数字是%d\n", iRandomNum);
    return 0;
}

关键逻辑说明

  1. 输入校验逻辑:遍历input_buf里的每个字符,遇到非数字字符就标记输入非法,完美解决多位数输入的校验问题
  2. 字符串转数字:用标准库atoi()函数直接把全数字的字符串转换为int类型,不需要自己手动写转换逻辑,代码更简洁高效
  3. 友好提示:猜错的时候额外提示猜大还是猜小,提升用户体验,不需要可以自行删除对应提示代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:02