0

別の関数を使用してユーザー入力を検証する必要があります。たとえば、プログラミングは functionA で入力を求めており、検証コードは FunctionB にある必要があります...検証用の ifs ステートメントと while ステートメントはすべて知っていますが、これに 2 つの別々の関数を使用する方法がわかりません...サンプルは次のとおりです。走る..

#include <stdio.h>

void get_input (int * inp);
double valid_input (void);

main ()
{
    get_input (&inp);
    valid_input ();
}

void get_input (int *inp)
{
    printf("enter something");
    scanf("%d", &inp);
}

double valid_input ()
{
    // what to put here ?
}
4

2 に答える 2

4

この場合、 によって返される値によってscanfユーザー入力が有効かどうかが決まるため、1 つの関数に保持する必要があります。

また、パラメーターのアドレスを scanf に渡す必要はありません。これは既に int へのポインターです。

関数を次のように書き直すことを検討してください。

int get_input (int *inp);

// main function is here

// returns 1 if input was valid
// see documentation for scanf for possible return values
// http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
int get_input (int *inp)
{
    printf("enter something: ");
    return scanf("%d", inp); 
}

次に、関数の戻り値を使用して、成功したかどうかを判断できます。次のようにします。

int value;
if (get_input(&value) == 1)
{
    // input was valid
}
else
{
    // function returned an error state
}
于 2012-07-13T20:57:41.813 に答える
1

あなたが探している検証が正確にはわかりません。探していた文字タイプが入力されていることを確認するだけの場合は、Wug の答えが近いです。

何らかの検証を行う別の関数を探している場合、これが出発点になる可能性があります。

#include <stdio.h>

int get_input (int *integerINput, char *characterInput);
void valid_input (int inp);

main()
{
    int integerInput;
    char charInput[2];

    // man scanf reports that scanf returns the # of items
    //      successfully mapped and assigned.
    //      gcc 4.1.2 treats it this way.
    if (get_input (&integerInput) < 2)
    {
        printf ("Not enough characters entered.\n");
        return;
    }

    valid_input (integerInput);
}

int get_input (int *integerInput, char *characterInput)
{
    int inputCharsFound = 0;

    printf ("Enter an integer: ");

    inputCharsFound += scanf ("%d", inp);


    printf ("Enter a character: ");

    // The first scanf leaves the newline in the input buffer
    //    and it has to be accounted for here.
    inputCharsFound += scanf ("\n%c", characterInput);

    printf ("Number of characters found = %d\n", inputCharsFound);

    return inputCharsFound;
}

void valid_input (int inp)
{
    if (inp > 5)
        printf ("You entered a value greater than 5\n");
    else
        printf ("You entered a value less than 5\n");
}

EDIT HasanZ は、以下のコメントで複数の変数を処理する方法の詳細を求めました。別の入力文字を読み取るようにコードを更新しました。

一般的な用語で別の関数で検証する方法を尋ねたので、適切な入力を受け入れてその入力を検証する最善の方法を決定するのはあなたに任せます。

Cプログラミングの詳細については、こちらもご覧ください。

于 2012-07-13T21:12:43.103 に答える