【问题标题】:c program to allow user to change there already set 4 digit pinc程序允许用户更改已经设置的4位密码
【发布时间】:2025-11-29 23:35:01
【问题描述】:
  1. 输入 PIN 并验证正确
  2. 更改密码
  3. 显示输入 PIN 的次数 (i) 成功 (ii) 不正确
  4. 退出程序

我在上面的问题中遇到问题选项 2,它应该执行以下操作: 如果他们选择选项 2,则应允许他们更改 PIN。程序应首先验证原始引脚。当他们输入新 PIN 时,您的程序必须通过询问 客户重新输入此新 PIN。这将验证输入的新 PIN 是正确的,没有出错。如果有任何差异和 验证失败,您的程序必须显示相应的错误消息 并且原来的 PIN 应该保持不变。

当用户输入他们的新密码时,我的问题出现了,1.密码必须是 4 位长 2.如果用户在输入新密码时输入错误,原始密码必须保持不变。如果他们正确输入了他们的新密码,那么他们的新密码必须更改为该密码。我已经发布了选项 2 的代码。

如果我的问题不清楚,请向我提问。

case 2:
      {
           //ask user to enter their current pin
           printf("Please enter your current pin \n");
           scanf("%d",&current_pin);


           if(current_pin != 1234)
           {
                //if pin entered is not the same as 1234-print error
                printf("Incorrect pin \n");
                unsuccessful ++;
                break;
           }//end if    

           else
            {
                successful++; 

                //ask user to enter new pin
                printf("Please enter your new pin: \n");
                scanf("%d",&new_pin);           

            } //end else

            //set new pin as the current pin
            current_pin = new_pin:      

            //check if pin is 4 digits long
            if(current_pin>999 && current_pin<10000)
            {
                //ask user to re enter their new pin
                printf("Please re-enter your new pin: \n");
                scanf("%d",&new_pin);

                printf("Your new pin is %d", new_pin);

                //set new pin as the current pin
                current_pin = new_pin:  
            }   

           else
            {
                printf("Incorrect entry- pin must be 4 digits and cannot start with a 0");                          
            }

                   new_pin=current_pin;

              break;
            }

我知道这段代码很笨拙,希望你能理解它。我知道我想做什么,但我做不到。

****编辑**** 好的,我现在明白我让你们中的一些人感到困惑。也许我应该改写我的问题。并将其分解为多个部分。如果它更容易,我可以发布程序的完整代码。

  1. 我希望用户输入他们当前的 pin,如果程序是第一次运行,这个 pin 被赋值为 1234。如果用户已经完成了这个过程,当前 pin 现在将是他们的 pin已将其更改为。

  2. 新密码必须是4位数字

  3. 这可能是推它,但如果用户在我的程序中输入一个字母,它将进入无限循环,有没有简单的方法解决这个问题。

【问题讨论】:

  • 我看到的第一件事是,如果用户输入的新 PIN 码不正确,您应该退出该功能。实际上,您通过并设置 new_pin=current_pin; !!!!但是,您能告诉我们您实际上遇到了什么问题吗?
  • 你的 switch 语句是否包含在循环中?首先,您应该有类似 while(current_pin != 1234) 之类的内容,您要求用户再次输入它,直到他们决定退出或达到不成功尝试的次数。

标签: c


【解决方案1】:

这有点奇怪:

   printf("Please enter your current pin \n");
   scanf("%d",&current_pin);
   if(current_pin != 1234)
   {

current_pin 是存储用户密码的值吗?如果是这样,您将在执行 scanf 时更改它。创建一个新变量来存储结果。像这样的:

   int value;
   scanf("%d",&value);
   if(current_pin != value)
   {

你似乎经常这样做:

current_pin = new_pin:

我承认我对冒号是拼写错误还是做了一些我不理解的事情有点困惑。

但是,在检查新引脚的值之前,您不应该执行此分配

//check if pin is 4 digits long
if(new_pin>999 && new_pin<10000)
{
    int verified;
    //ask user to re enter their new pin
    printf("Please re-enter your new pin: \n");
    scanf("%d",&verified);

    if(verified == new_pin))
    {
        printf("Your new pin is %d", new_pin);

        //set new pin as the current pin
        current_pin = new_pin; // <--- This is the only place you assign to current_pin 
    }
    else
    {
        //tell the user there was an error
    }
}

【讨论】:

    【解决方案2】:

    在你的第一个 if 语句中

    if (current_pin != 1234)
    

    您正在将 current_pin 与常量值 1234 进行比较 尝试使用变量而不是 1234 常量。

    【讨论】:

      【解决方案3】:

      您从未检查过重新输入的 newpin 是否与 newpin 相同。

      【讨论】: