-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」の使用。for (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内で宣言されている場合、その変数はそのループの外になります。forundefinedforoたとえば、関数の最初と完了時に、ループの外側で 変数を宣言します。


完全にデバッグされたコードは次のとおりです。

#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 に答える