使用getchar()暂停程序时的循环条件逻辑问题求助
逻辑运算符的逻辑错误分析
你的核心问题出在逻辑运算符的逻辑判断上,下面给你拆解清楚:
为什么while (check != 'm' || check != 'M' );永远不会终止?
把这个条件拆成两种情况看:
- 如果
check是'm':check != 'm'是假,但check != 'M'是真——或运算(||)只要有一个判断为真,整体结果就是真,所以循环条件成立,会继续跑。 - 如果
check是'M':check != 'M'是假,但check != 'm'是真,同样或运算结果为真,循环停不下来。 - 如果
check是其他字符:两个判断都是真,或运算结果还是真,循环继续。
说白了,不管check是什么值,这个条件永远为真,循环根本不会终止。
为什么while (check != 'm' && check != 'M' );是正确的?
这个条件的意思是:只有当check既不是'm',同时也不是'M'的时候,才继续循环。
- 如果
check是'm':check != 'm'是假——与运算(&&)需要两个判断都为真才成立,所以整体条件为假,循环终止。 - 如果
check是'M':同理,check != 'M'是假,条件为假,循环终止。 - 如果是其他字符:两个判断都为真,条件成立,继续循环。
这正好符合你“输入'm'或'M'就终止循环”的需求。
额外提示:代码里的小坑
用cin >> month读取数字后,你输入的回车会留在输入缓冲区里,接下来的getchar()会读到这个换行符('\n'),而不是你后续输入的字符。要解决这个问题,可以在cin >> month之后加一行:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
记得要包含头文件<limits>,这样就能跳过缓冲区里的换行,让getchar()读到你真正输入的字符。
内容的提问来源于stack exchange,提问作者cherriedy
相关产品推荐
相关产品推荐

