簡體   English   中英

使用 c 編程語言嘗試 3 次密碼屏蔽

[英]password masking with 3 attempts using c programming language

我是學習 C 編程語言的初學者。 我的問題一直存在一些問題,即我的 ATM 銀行系統嘗試了 3 次 pin 屏蔽。 此外,我使用了 goto 語句,但是,我們僅限於使用此語句。 那么如何刪除 goto 語句並改用循環呢? 急需幫助。 謝謝你。 代碼在下面。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

#define ENTER 13
#define TAB 9
#define BCKSPC 8


int pinValidation()
{
    char pwd[20], pin[]="5263";
    int attemptCount=1;
    char ch;
    start:
    int i=0;

        //attempts count
    do{
        printf("Enter your pin: ");
        while(1)
            {
                ch=getch();
                if(ch == ENTER || ch == TAB)
                {
                    pwd[i]='\0';
                    break;
                }
                else if(ch == BCKSPC)
                {
                    if(i>0)
                    {
                        i--;
                        printf("\b \b"); //for the cursor
                    }
                }
                else if(pwd[i]=ch)
                {
                    pwd[i]=ch;
                    i++;
                    printf("*");
                }
            }
    }while(ch != ENTER);

        if(strcmp(pin,pwd)==0 && attemptCount <= 4)
            {
                Beep(1000,500);
                Beep(1000,600);
                printf("\nAccess granted");
                
            }
        
        else
        {
            Beep(750, 800);
             printf("\n\nUnsuccessful login %d of 3 attempt\n\n", attemptCount);
             attemptCount++;
            if (attemptCount < 4) goto start;
            if (attemptCount == 4) {
                goto reached;
            }
            getch();
            reached:
            Beep(800,800);
            Beep(800,800);
            Beep(800,900);
            printf("Attempt reached");
             
        }
        getch();
            
}
        

int main()
{
    pinValidation();
    return 0;
}

/*

    start
    initialize variables
    input pin
    if pin is != inputed pin && attempt < 3
        print unsuccessful login %d attempt left
    else if pin != inputed pin && attempt += 3
        print "attempt reached"
    else if pin == inputted pin && attempt <= 3
        print "Access granted"

*/

這看起來有點像課程? ;-)

盡管如此,希望這可以幫助您理解該方法...

#include <stdio.h>
#include <stdbool.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

#define ENTER 13
#define TAB 9
#define BCKSPC 8

#define MAXATTEMPTS 4
#define MAXPINLENGTH 4

void getPin(char* pinCapture, size_t size)
{
    char ch;
    int pinLength = 0;
    pinCapture[pinLength] = '\0';

    printf("Enter PIN? ");
    do
    {
        ch = getch();
        switch (ch)
        {
            // Characters to ignore...
            case ENTER:
            case TAB:
                break;
            // Allow user to delete previous digits
            case BCKSPC:
                if (pinLength > 0)
                {
                    pinLength--;
                    printf("\b \b");
                }
                break;
            // Add character to PIN...
            default:
                pinCapture[pinLength] = ch;
                pinLength++;
                printf("*");
                break;
        }
    } while (ch != ENTER && pinLength < size);
    pinCapture[pinLength] = '\0';
    printf("\n");
}

bool pinValidation()
{
    char validPin[] = "1234";
    int attemptCount = 0;
    char pin[5];

    while (attemptCount < MAXATTEMPTS && strcmp(pin, validPin) != 0)
    {
        attemptCount++;
        getPin(pin, MAXPINLENGTH +1);
        if (strcmp(pin, validPin) != 0)
        {
            printf("Invalid attempt. You have %d more trys.\n", MAXATTEMPTS - attemptCount);
        }
    }
    if (strcmp(pin, validPin) == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main()
{
    if (pinValidation())
    {
        printf("Access granted.\n");
    }
    else
    {
        printf("Access denied.\n");
    }
    return 0;
}

/*
    start
    initialize variables
    input pin
    if pin is != inputed pin && attempt < 3
        print unsuccessful login %d attempt left
    else if pin != inputed pin && attempt += 3
        print "attempt reached"
    else if pin == inputted pin && attempt <= 3
        print "Access granted"
*/

您無需使用循環代替“goto”語句。 您只需將“do while”和“while”循環更改為“for”循環。 我有一個代碼示例給你。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define ENTER 13
#define BACKSPC 8

int pinvalidation()
{
    char pwd[20], pin[5] = "6244";
    char ch;
    int attempt = 0, i = 0;
    printf("You have only 3 attempted\n");
start:
    // Take password as input
    printf("Enter your pin:  ");
    for (int i = 0; 1; i++)
    {
        ch = getch();
        if (ch == ENTER)
        {
            pwd[i] = '\0';
            break;
        }
        else if (ch == BACKSPC)
        {
            if (i > 0)
            {
                i--;
                printf("\b \b");
            }
        }
        else
        {
            pwd[i] = ch;
            printf("*");
        }
    }
    attempt++;
    // check it is correct or not
    if (strcmp(pwd, pin) == 0 && attempt <= 3)
    {
        Beep(1000, 200);
        printf("\nAccess Granted\n");
        return 1;
    }
    else
    {
        Beep(700, 800);
        printf("\n\t\t Wrong Password \n%d attempt left\n", 3 - attempt);
        if (attempt < 3)
            goto start;
        else
        printf("Access Denited");
            return 0;
    }
}
int main()
{
    pinvalidation();
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM