使用 c 编程语言尝试 3 次密码屏蔽
password masking with 3 attempts using c programming language
我是学习 C 编程语言的初学者。我的问题一直存在一些问题,即,我的 ATM 银行系统尝试了 3 次密码屏蔽。此外,我使用了 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]='[=10=]';
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] = '[=10=]';
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] = '[=10=]';
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] = '[=10=]';
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;
}
我是学习 C 编程语言的初学者。我的问题一直存在一些问题,即,我的 ATM 银行系统尝试了 3 次密码屏蔽。此外,我使用了 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]='[=10=]';
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] = '[=10=]';
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] = '[=10=]';
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] = '[=10=]';
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;
}