当我尝试编译时,它说 "h" 未初始化。但是有时它会起作用,具体取决于我在下面所做的事情。什么我没有得到这里?

when i try to compile it says "h" is not initialized. however it works sometimes depending on what i do below. whats am i not getting here?

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    //get height
    int h;
    do
    {
        get_int("Height: ");

    } while (h < 1 || h > 8);

    //
    for (int y = 7 - h; y > 0; y--)
    {
        if (y < 0)
            printf("#  #");
        else
            printf(" ");
    }

    for (int x = 0; h > x; x++)
    {
        printf("#");
    }
}

我整天都在研究这个,但我就是不明白。有时当我检查时,我的代码与课程相同,但它不起作用。我不确定这是我的间距还是什么。或者我会修复一个错误并继续工作,直到它在我开始工作后我什至没有触及那个区域后才回来。感觉完全迷失了。

您的代码具有未定义的行为,因为 h 未初始化并且您从未将 get_int("Height: ") 的 return 值存储到其中。

h 的值未定义,因此对于程序的不同运行它可能不同,从而解释观察到的行为。修复很简单:只需在 do/while 循环中写入 h = get_int("Height: ");

这里是修改后的值:

#include <cs50.h>
#include <stdio.h>

int main() {
    int h;

    do  {
        h = get_int("Height: ");

    } while (h < 1 || h > 8);

    for (int y = 7 - h; y > 0; y--) {
        if (y < 0)
            printf("#  #");
        else
            printf(" ");
    }

    for (int x = 0; h > x; x++) {
        printf("#");
    }
    return 0;
}