【问题标题】:Restrict input to 4 digit entry (0-9)将输入限制为 4 位输入 (0-9)
【发布时间】:2013-05-27 13:00:13
【问题描述】:

程序设计课的家庭作业#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;
}

【问题讨论】:

  • 程序是否有效?您是否运行过测试用例以查看是否接受/拒绝了正确的事情?
  • 是的,它有效。它有时只是在不应该验证的时候验证,反之亦然。编辑:当我说“不应该”时,我的意思是基于我想要的结果。
  • 使用strtol() 可能不需要太多更改并且会容易得多,但根据上面的注释,您可能已经知道这一点。 :)
  • 我以前从未使用过,但我会调查一下!
  • Restrict user input to 8 digit number 的可能重复项,但它要求大约 4 位数字。

标签: c validation input


【解决方案1】:

我通过使用 char 数组完成了类似的方法,然后使用了一个函数来接受正确数量的数字,其中可以包括字母或特殊符号,并使用验证函数来验证输入的所有数字序列通过验证。一切看需求!

您还可以使用一个函数来读取正确数量的所有数字并将每个数字保存到 char 数组中并增加一个指针,如果您在键入时收到任何无效输入,您可以忽略它并继续输入最多一些忽略时间直到爆发,或返回错误。

毕竟我认为您应该使用 char 数组,因为 0001 仍然是有效的密码。

【讨论】:

    【解决方案2】:

    如果您想检查他们是否输入了正确数量的字符,请阅读一行输入内容并检查长度。然后您可以检查内容的有效性(所有数字)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 也许你可以举个例子?
      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 2013-08-11
      • 2018-03-25
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2013-12-29
      • 2014-11-07
      相关资源
      最近更新 更多