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

int main(void) 
{
    int height;
    {
        printf("Please select a height value between 1-23.");
        height = GetInt();

        while (height < 1 || height > 23)
        {
            printf("Height mustbe between 1-23, please choose new value.\n");
            height = GetInt();
        }
        {
            for (int n = 0; n < height; n++)

            for (int o = 0; o + n + 1 < height; o++)
            {
                printf(" ");
            }            
            for (int p = 0; p <= o; p++)
            {
                printf("#");
            }
        }
    }
}

// 我不断收到这个错误:

使用未声明的标识符“o”。对于 (int p = 0; p <= o; p++) ^

我在其正上方的行中声明了“0”,我似乎无法弄清楚为什么它给了我这个错误。请帮忙,我对c非常陌生,非常感谢任何见解。谢谢!

4

4 回答 4

5
    for (int o = 0; o + n + 1 < height; o++)
    {
        printf(" ");
    } 

    /* o is now out-of-scope */

标识符的范围o}.

于 2014-07-28T14:52:25.833 回答
4

在循环头中声明的变量的范围和生命for周期仅限于该for循环。它不存在于那个for循环之外。

于 2014-07-28T14:52:27.093 回答
3

我相信你真正想要的是:

    for (int n = 0; n < height; n++)
    { // not actually necessary - but makes things much clearer.
        for (int o = 0; o + n + 1 < height; o++)
        {
            printf(" ");
            for (int p = 0; p <= o; p++)
            {
                printf("#");
            }
        }            
    }
于 2014-07-28T14:57:12.677 回答
3

如果变量在循环o内声明for,它将undefined在该for循环之外。 在循环之外声明变量o,例如在函数开头和完成时。


这将是您完全调试的代码:

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

int main(void) 
{
    int height, o;
    {
        printf("Please select a height value between 1-23.");
        height = GetInt();

        while (height < 1 || height > 23)
        {
            printf("Height mustbe between 1-23, please choose new value.\n");
            height = GetInt();
        }
        {
            for (int n = 0; n < height; n++)

            for (o = 0; o + n + 1 < height; o++)
            {
                printf(" ");
            }            
            for (int p = 0; p <= o; p++)
            {
                printf("#");
            }
        }
    }
}
于 2014-07-28T14:52:25.457 回答