2

関数が自分自身を呼び出すとき、それは再帰と呼ばれることを私は知っています。しかし、プロセス全体を停止するIFステートメントが存在するまで、関数AがAを呼び出す関数Bを呼び出す場合、どのように呼び出すのでしょうか。1冊のC本からこの演習を見てください(ところで、これをもっとうまく解決できますか?)

4つの番号付きの選択肢のメニューを表示し、1つを選択するように求める関数を記述します。(出力は前述のようになります。)

下限と上限の2つのint引数を持つ関数を記述します。関数は入力から整数を読み取る必要があります。整数が制限を超えている場合、関数はメニューを再度印刷して(この質問のパート「a」の関数を使用して)、ユーザーに再度プロンプトを表示してから、新しい値を取得する必要があります。適切な制限内の整数が入力されると、関数はその値を呼び出し元の関数に返す必要があります。

この質問のパート「a」と「b」の関数を使用して、最小限のプログラムを作成します。最小限とは、メニューによって約束されたアクションを実際に実行する必要がないことを意味します。選択肢が表示され、有効な応答が得られるはずです。

#include <stdio.h>

void Display(void);
int Limits(int a, int b);

int main(void)
{
    Display();
    return 0;
}
void Display()
{
    int y = 0;
    printf("1 - 2 - 3 - 4\n");
    y = Limits(0, 100);
    if(y < 100 && y > 0)
        printf("%d\n", y);
}
int Limits(int a, int b)
{
    int x;
    scanf("%d", &x);
    if(x < a || x > b)
        Display();
    return x;
}

出力:

1 - 2 - 3 - 4
1234
1 - 2 - 3 - 4
34456
1 - 2 - 3 - 4
123
1 - 2 - 3 - 4
-34
1 - 2 - 3 - 4
-23
1 - 2 - 3 - 4
88
88
Press [Enter] to close the terminal ...
4

1 に答える 1

2

これは、相互再帰または(それほど頻繁ではありませんが)相互再帰と呼ばれます。

それをきれいに解決する方法に関しては、次のようなパターンに大まかに適合するように私には聞こえます。

namespace {
    int show_menu() { 
        printf("1 - 2 - 3 - 4");
        int n;
        std::cin >> n;
        return n;
    }
}

int menu() { 
    int value;
    do { 
        value = show_menu();
    } while (value <1 || value > 4);
    return value;
}
于 2013-03-23T17:15:40.500 に答える