我是學習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"
*/
uj5u.com熱心網友回復:
這看起來有點像作業?!;-)
盡管如此,希望這可以幫助您理解該方法...
#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"
*/
uj5u.com熱心網友回復:
您無需使用回圈代替“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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/421391.html
標籤:
上一篇:isAuth未定義
