1

2 つの異なる質問を使用して、2 つの異なる数値入力を検証するために、同じ関数 (検証) を使用する方法を理解しようとすると問題が発生します

int validate(int low, int high) {
    int flag = 0, number = 0;

    do 
    {
        printf("Enter maximum value between %d and %d: ", low, high);
        scanf("%d", &number);
        if (number <= low || number > high) 
        {
            printf("INVALID! Must enter a value between %d and %d: ", low, high);
            scanf("%d", &number);
        }
        else {
            flag = 1;
        }
    } while(flag == 0);
    return number;
}

ここに main() があります

int main () {
    int num1, num2;

    switch(menu()) {
    case 1:
    printf("~~~~~~~\n6/49 Number Generator\n");
    num1 = validate(1,49);
    num2 = validate(1, 6);
    break;
    default:
        printf("end");
    }
return(0);
}

2回目に電話validate()するとき( を返すnum2)、番号の数量を尋ねる必要があります。

どんな助けでも大歓迎です。

4

2 に答える 2

2

この関数シグネチャに制限されている場合は、内部静的フラグを使用できます

于 2012-10-30T05:17:51.607 に答える
1

理想的には、validate() には、実際に何をするかを示す別のパラメーターが必要です。のようなものint validate(int low, int high, int type)

次に、さまざまな操作を行うためにタイプをオンにします。ただし、validate は適切ではないため、関数の名前を変更することをお勧めします。たとえばnumGenEngine、type は step1、step2 などを意味します。

関数定義をそのままにする必要があることを考慮して、静的変数を使用できます。

int validate(int low, int high) {
    static int step = 0;
    int flag = 0, number = 0;

    if (step == 0) {
        // the first thing
    } else if (step == 1) {
        // the other thing
            // to reuse the function for the next set of operations
            // reset step to -1 here
    }

    step++;
    return number;
}
于 2012-10-30T05:14:15.127 に答える