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

关于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:31:05