1

私のプログラムのこんにちは、私は別の関数の複数の配列の入力を検証する必要があります。つまり、配列があるとしましょう:バーコード[MAX]。ユーザーにバーコードをこの配列に入力してもらいたいので、多くのバーコードと同様に、バーコード[MAX]変数に入力します。この入力を検証して、適切な形式であることを確認する必要があります。つまり、基本的に0より大きく、末尾の文字はありません。そして、この検証は別の関数から行う必要があります。

したがって、次のようになります。

for (i = 0; i < MAX; i++)
{
    printf ("Barcode: ");
    barcode[MAX] = validate();

    printf ("Price: ");
    price[MAX] = validate();
}

これはメイン関数にあり、ユーザーにバーコード/価格を入力するように呼び出し、別の関数で入力を検証します。しかし、配列入力の検証関数を作成する方法がわかりません。私は以前に単純な変数のために1つ書いたことがありますが、配列は私を混乱させます。以前の検証コードは次のようなものでした。

do
{
    rc = scanf ("%llf%c", &barcode[MAX], &after);

    if (rc == 0)
    {
        printf ("Invalid input try again: ");
        clear();
    }
        else if (after != '\n')
        {
            printf ("Trailing characters detected try again: ");
            clear();
        }
            else if ()
            {

            }
                else
                {
                    keeptrying = 0;
                }

} while (keeptrying == 1);

しかし、これは配列変数では機能するようには見えません。これは、非配列変数で使用するコードでした。どうすればこれを修正できますか?また、2つの配列は異なるデータ型です。バーコードは長い長い変数であり、価格は二重変数です。

4

1 に答える 1

2

配列を反復処理する必要があるため、固定位置MAX(barcode [MAX])ではな​​くbarcode[i]も反復処理します。

for (i = 0; i < MAX; i++)
{
    printf ("Barcode: ");
    barcode[i] = validate();

    printf ("Price: ");
    price[i] = validate();
}

longlongfloatをfloatに置き換えます。cではlonglongfloatを使用できません。

検証は次のようになります。

int validate()
{
    char after;
    float input;
    int rc, keeptrying = 1;
    do
    {
        printf("Give me a code bar :\n");
        rc = scanf ("%f%c", &input, &after);

        if (rc == 0)
        {
            printf ("Invalid input try again: \n");
            while ( getchar() != '\n' );
        }
        else if (after != '\n')
        {
           printf ("Trailing characters detected try again: \n");
           while ( getchar() != '\n' );
        }
       else
        keeptrying = 0;

    } while (keeptrying == 1);
    return input;
}
于 2012-11-11T20:39:39.283 に答える