关于C语言布尔表达式的困惑:为何条件判断逻辑看似颠倒?
问题解析与修正
你搞反了do-while循环的终止逻辑,这才导致效果和预期完全相反。
核心问题:do-while的执行逻辑
do-while循环是先执行一次循环体,再判断条件:
- 条件为真时,会回到循环开头继续执行(也就是继续让用户输入)
- 条件为假时,才会退出循环,执行后续代码
你的代码里,while (height > 0 && height < 9); 这个条件的意思是:只要输入的height在1~8之间,就继续强制用户重新输入;只有当height≤0或者≥9时,才会退出循环执行打印#的代码——这和你想要的“输入小于9的数值时打印#”完全相悖。
修正后的代码
把do-while的条件改成height <= 0 || height >= 9,就能实现“只有输入1~8之间的数才退出循环、打印#”的需求:
#include <cs50.h> #include <stdio.h> int main(void) { // Ask for height: int height; do { height = get_int("Height: "); } // 当数值不在1~8范围内时,继续要求输入 while (height <= 0 || height >= 9); int height_start = 0; while (height_start < height) { height_start++; printf("#\n"); } return 0; }
验证逻辑
现在输入1~8之间的任意数(比如5),do-while的条件5 <=0 ||5 >=9为假,直接退出循环,随后执行while循环打印5个#;如果输入9、0或者负数,条件为真,程序会持续提示用户输入,直到符合要求为止。
内容的提问来源于stack exchange,提问作者Deni
相关产品推荐
相关产品推荐

