プログラム設計クラスの宿題 #2
パート1:
- ユーザーに 8 桁のアカウント番号 (0 ~ 9) の入力を求め、有効になるまで繰り返します。
パート2:
- ユーザーに 4 桁のピン番号 (0 ~ 9) を設定するように促し、有効になるまで繰り返します。
- ピン番号を確認するようユーザーに促し、無効な場合はパート 2 に戻ります。
プログラムは機能しますが、いくつかの追加事項について検証したいと思います。
- 先行ゼロを受け入れます。例: '00123456'
- 追加の文字を拒否する例: '12345678a'
- 「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;
}