[英]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.