C语言嵌套if结构未按预期运行,猜数字程序无法输出正确提示
问题分析与修复方案
嘿,我一眼就揪出问题啦!你的嵌套if逻辑本身没毛病,但类型不匹配导致猜对数字时永远触发不了Correct!的输出,还有个小输入问题,我给你拆解清楚:
核心问题:字符与整数的比较不匹配
你定义的cUserInput是char类型,当用户输入数字比如5时,程序实际存的是字符'5'的ASCII码(十进制是53),而随机数iRandomNum是int类型的5——这俩数值完全不一样,所以cUserInput == iRandomNum这个条件永远不会成立!
次要问题:输入格式的适配
用scanf("%c", &cUserInput)读取数字时,还可能意外读取到用户输入后的换行符,但这不是当前的核心问题,我们可以一起修正。
两种修复方案
方案1:把输入变量改成int类型(更直观)
直接把存储用户输入的变量改成int,用%d格式符读取,这样就能和随机数直接比较了:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <time.h> int main() { int iRandomNum = 0; int iUserInput = 0; // 改成int类型 srand(time(NULL)); iRandomNum = (rand() % 10) + 1; printf("Guess a number between 1 to 10:"); scanf("%d", &iUserInput); // 用%d读取整数 // 额外加个范围判断,确保输入在1-10之间 if(iUserInput >=1 && iUserInput <=10) { if(iUserInput == iRandomNum) printf ("Correct!"); else printf("The right answer was %d", iRandomNum); } else printf("You did not enter a valid number between 1-10."); return 0; }
方案2:把字符转成整数(保留char变量的情况)
如果你想继续用char存储输入,可以通过cUserInput - '0'把字符转成对应的整数(ASCII码中数字字符是连续的,'0'对应48,所以'5'-'0'=5):
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <time.h> int main() { int iRandomNum = 0; char cUserInput = 0; srand(time(NULL)); iRandomNum = (rand() % 10) + 1; printf("Guess a number between 1 to 10:"); scanf("%c", &cUserInput); if(isdigit(cUserInput)) { // 把字符转成整数后再比较 if((cUserInput - '0') == iRandomNum) printf ("Correct!"); else printf("The right answer was %d", iRandomNum); } else printf("You did not enter a digit."); return 0; }
不过这个方案有个小缺陷:如果用户输入两位数字(比如10),%c只会读取第一个字符'1',所以还是方案1更适合这个猜数字场景。
内容的提问来源于stack exchange,提问作者Shubh Roy
相关产品推荐
相关产品推荐

