1

プログラム設計クラスの宿題 #2

パート1:

  • ユーザーに 8 桁のアカウント番号 (0 ~ 9) の入力を求め、有効になるまで繰り返します。

パート2:

  • ユーザーに 4 桁のピン番号 (0 ~ 9) を設定するように促し、有効になるまで繰り返します。
  • ピン番号を確認するようユーザーに促し、無効な場合はパート 2 に戻ります。

プログラムは機能しますが、いくつかの追加事項について検証したいと思います。

  1. 先行ゼロを受け入れます。例: '00123456'
  2. 追加の文字を拒否する例: '12345678a'
  3. 「12345678 123abc」などの追加の「単語」を拒否

私は、文字列の入力を求め、その長さ (4 または 8) を確認し、そのテストに合格した場合は整数に変換し、その場でテストを続行することを考えています。

何かご意見は?

[ の使用を嫌う人が多いことはscanfわかっています。[私の]車輪を再発明するのではなく、プログラムに最小限の変更を加える方法にもっと興味があります! :) ]

#include <stdio.h>

int main()
{

    int return_val = 0;         
    int account_number = 0;
    int pin_number = 0;
    int pin_number_verify = 0;
    int valid_pin = 0;


    // Account # Validation
    while(1)
    {
        printf ("Please enter your 8 digit account number:\n");
        return_val = scanf("%d", &account_number);

        if((account_number > 9999999) && (account_number < 99999999))
        {
            if (return_val == 1)
            {
                break;
            }
        }

        printf("Invalid account number. Account number must be 8 digits.\n\n");

        while (getchar() != '\n');  /* Clear keyboard input buffer */
    }

    return_val = 0;


    // Pin # Validation
    while(1)        
    {
        printf ("\nPlease choose a 4 digit pin number:\n");
        return_val = scanf("%d", &pin_number);

        while (getchar() != '\n');  /* Clear keyboard input buffer */

        if((pin_number > 999) && (pin_number < 9999))
        {
            if (return_val == 1)
            {
                while(1)
                {
                    printf("Re-enter pin number:\n");
                    return_val = scanf("%d", &pin_number_verify);
                    while (getchar() != '\n');  /* Clear keyboard input buffer */

                    if(pin_number != pin_number_verify)
                    {
                        printf("Pin setup unsuccessful\n\n");
                        break;
                    }
                    else
                    {
                        valid_pin = 1;
                        break;
                    }
                }
            }
        }

        if (valid_pin == 1) {
            break;
        }

        printf("Invalid pin number. Pin number must be 4 digits.\n");

        while (getchar() != '\n');  /* Clear keyboard input buffer */
    }


    // Successful account setup prompt
    printf("\nPin setup successful!\n");
    printf("Account #: %d\n", account_number);
    printf("Pin #: %d\n", pin_number);
    printf("Have a nice day.\n");

    return 0;
}
4

3 に答える 3

0

正しい文字数が入力されているかどうかを確認したい場合は、入力行を読み取って長さを確認します。次に、コンテンツの有効性を確認できます (すべて数値)。

于 2013-05-31T16:52:27.217 に答える
0

isalpha() を使用して、文字があるかどうかを確認できます。

于 2013-06-01T11:57:37.593 に答える