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
相关产品推荐
相关产品推荐

