0

中かっこの使用に関する以前の質問をいくつか読んだことがあります。私の理解では、1行しかない場合は中かっこを使用しなくても問題ありませんが、多数のコード行を使用する場合は、大かっこを使用する必要があります。

私には課題があり、インストラクターは、良い習慣のためにあらゆる状況でブラケットを使用するように私たちに要求しています. また、サンプル コードの調査と使用も許可してくれます。

さて、私の質問は、括弧を使用しないサンプル コードを見つけたことです。ブラケットをコードに追加しようとすると、出力が正しくなくなります。 誰かが複数行のコードで中括弧を正しく使用する方法を説明し、探している結果を達成する方法についての推奨事項を提案できますか?

出力が正しい場合のコードは次のとおりです。

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
// n >= 1
{ 
if(i == n)
{
    for(int j = 1; j <= n; j++) cout << '*'; cout << endl;
    for(int j = 1; j <= n; j++) cout << '*'; cout << endl;
} 
    else
    {
        for(int j = 1; j <= i; j++) cout << '*'; cout << endl;
        printStars(i+1, n); // recursive invocation

        for(int j = 1; j <= i; j++) cout << '*'; cout << endl;
    }
} // printStars

int main() {
    int n;
    int i=0;

        cout << "Enter the number of lines  in the grid: ";
        cin>> n;
        cout << endl;

        printStars(i,n);

    return 0;
}

そして、次のように「クリーンアップ」しようとすると:

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
{
    if(i == n)
    {
        for(int j = 1; j <= n; j++)
        {
            cout << '*';
            cout << endl;
        }
        for(int j = 1; j <= n; j++)
        {
            cout << '*';
            cout << endl;
        }
    }
    else
    {
        for(int j = 1; j <= i; j++)
        {
            cout << '*';
            cout << endl;
        }
        printStars(i+1, n); // recursive invocation

        for(int j = 1; j <= i; j++)
        {
            cout << '*';
            cout << endl;
        }
    }
} // printStars

int main() {
    int n;
    int i=0;

        cout << "Enter the number of lines  in the grid: ";
        cin>> n;
        cout << endl;

        printStars(i,n);

    return 0;
}
4

1 に答える 1

3

問題は、印刷ループに入れすぎていることです。

    for(int j = 1; j <= i; j++)
    {
        cout << '*';
        cout << endl;
    }

次のようにする必要があります。

    for(int j = 1; j <= i; j++)
    {
        cout << '*';
    }
    cout << endl;

中括弧のないループには、1 つのステートメントのみを含めることができます。これは、使用する行末印刷coutがループの終了時にのみ呼び出されることを意味します。

これは、中括弧を使用した完全なコードです。

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
// n >= 1
{ 
if(i == n)
{
    for(int j = 1; j <= n; j++){
        cout << '*';
    }
    cout << endl;

    for(int j = 1; j <= n; j++){
        cout << '*';
    }
    cout << endl;
} 
    else
    {
        for(int j = 1; j <= i; j++){
            cout << '*';
        }
        cout << endl;

        printStars(i+1, n); // recursive invocation

        for(int j = 1; j <= i; j++){
            cout << '*';
        }
        cout << endl;
    }
} // printStars

int main() {
    int n;
    int i=0;

        cout << "Enter the number of lines  in the grid: ";
        cin>> n;
        cout << endl;

        printStars(i,n);

    return 0;
}
于 2015-04-18T18:09:29.633 に答える