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

C语言猜数字游戏无法输出"So Close"的原因是什么?

问题原因分析
  • 判断顺序逻辑错误:代码中Guess>number和Guess<number已经把所有不等于目标值的情况全部覆盖,后续的So Close!判断分支永远不会触发,只有Guess == number时才会走到后续判断,且你把So Close!的判断放在了等于判断的前面,等于的正确逻辑也会被拦截。
  • "So Close!"的判断条件完全错误:你写的(Guess + 5) >= number || (Guess + 5) <= number是永真式,不管两个数是什么值该条件都会成立,完全不符合“差值小于等于5”的需求,正确逻辑应该是判断两者差值的绝对值abs(Guess - number) <= 5。
  • 输入与计数逻辑冗余:do-while循环外先读取了一次输入,循环内又做了重复的输入判断,会导致第一次就猜中时计数错误,逻辑结构冗余。
修正后可运行代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main ()
{
    int number, upper = 100, lower = 0, nGuesses = 0, Guess;
    srand(time(NULL));
    number = rand() % (upper - lower + 1) + lower;

    do
    {
        nGuesses++;
        printf("Enter a number\n");
        scanf("%d", &Guess);
        
        if(Guess == number)
        {
            printf("Number is %d. You got it in %d guesses!\n", number, nGuesses);
            break;
        }
        
        // 优先判断是否接近目标值
        if(abs(Guess - number) <= 5)
        {
            printf("So close!\n");
        }
        
        // 再判断大小提示
        if(Guess>number)
        {
            printf("Too high!\n");
        }
        else
        {
            printf("Too low!\n");
        }
        printf("Try again. You're at %d tries.\n", nGuesses);
    } while (Guess!= number);
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:36:00