家庭作業#2程序設計類限制輸入至4位輸入(0-9)
1部分:
- 提示用戶爲8位數的帳號(0-9),重複,直到有效。
2部分:
- 提示用戶設置4位PIN號碼(0-9),重複,直到有效的。
- 提示用戶驗證PIN碼,如果無效,則返回到第2部分。
程序工作,但是,我想確認一些額外的東西:
- 接受前導零前, '0'
- 拒絕其他字母前「。 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;
}
該程序是否工作?你是否運行測試用例來查看是否接受/拒絕了正確的事情? – John
是的,它的工作原理。它只是在不應該時驗證,反之亦然。編輯:當我說'不應該'我的意思是根據我想要的結果。 –
使用'strtol()'可能不需要太多的改變,而且會容易得多,但是您可能已經知道了,基於上面的註釋。 :) –