2013-05-31 36 views
1

家庭作業#2程序設計類限制輸入至4位輸入(0-9)

1部分:

  • 提示用戶爲8位數的帳號(0-9),重複,直到有效。

2部分:

  • 提示用戶設置4位PIN號碼(0-9),重複,直到有效的。
  • 提示用戶驗證PIN碼,如果無效,則返回到第2部分。

程序工作,但是,我想確認一些額外的東西:

  1. 接受前導零前, '0'
  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; 
} 
+0

該程序是否工作?你是否運行測試用例來查看是否接受/拒絕了正確的事情? – John

+0

是的,它的工作原理。它只是在不應該時驗證,反之亦然。編輯:當我說'不應該'我的意思是根據我想要的結果。 –

+0

使用'strtol()'可能不需要太多的改變,而且會容易得多,但是您可能已經知道了,基於上面的註釋。 :) –

回答

0

我已經通過具有字符數組做了類似的方法,然後使用該接受位適量,其可以包括字母或特殊標誌的功能,以及所使用的驗證函數來驗證輸入所有一系列數字以通過驗證。全部取決於要求!

你也可以使用一個函數來讀取所有正確數量的數字,並將每個數字保存到char數組中並增加一個指針,如果在輸入時接收到任何無效輸入,則可以忽略它並繼續輸入到一些無視時間直到爆發,或返回一個錯誤。

畢竟我認爲你應該使用一個字符數組,因爲0001仍然是一個有效的密鑰。

0

如果您想檢查他們是否輸入了正確的字符數,請閱讀一行輸入並檢查長度。然後你可以檢查內容的有效性(全部數字)。

0

您可以使用isalpha()來檢查是否有任何字符。

+0

也許你可以提供一個例子嗎? –