在c语言迭代中循环

时间:2016-07-28 12:19:30

标签: c

我不知道我的错误在哪里,我需要你的帮助。当我在用户名和密码中输入错误的数据时,它会询问是或否,再试一次。如果我输入Y为YES,我就不能再输入用户名了。

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

int main() {  
    printf ("\n\t\t  Welcome To Your Payroll Account!");
    printf ("\n\t\t  Please Enter Your Username & Password To Proceed.");
    printf ("\n\t ********************************************************* \n \n \n");

    char password [10], username [10], ch;
    char name [10] = "username";
    char pass[10] = "password";

    char month, ename, address;
    float regpay,regov,RD,RDOT,meal;
    float SSS,PH,PI,Union,other,SSSsal,Loan,Hloan,ULoan,ELoan,TD;
    float TE,Netpay;
    int n,day,year,i;
    char input;
    char again = 'Y';

    while (again == 'Y' || again =='y') {
        printf("Username: ");
        gets (username);

        printf("Password: ");    

        for (i = 0; i<8; i++){
            ch = getch();
            password[i] = ch;
            printf ("*");
        }

        password[i] = 0;
        printf("\n Your password is: ");

        for (i =0; i<8; i++) {
            printf("%c", password[i]);    
        } 

        if(strcmp(pass,password) == 0 && strcmp(name,username) == 0) {
            printf("\n \n You are logged in! \n");
            printf("Enter # to proceed \n");
            scanf("%c", &input);    
        } else {
            printf("\n \n Incorrect username or password");
            printf("\n\n Do you want to try again? YES(Y) / NO(N) \n");
            printf("Continue? ");
            scanf("%c", &again);
            again;

        if (again == 'N' || again == 'n') {
            system ("pause");
            return 0;
        } else {
            again;      
        } 
   }  
}

system ("pause");
return 0;
}

1 个答案:

答案 0 :(得分:0)

    printf("Continue? ");
    scanf("%c", &again);
    again;

if (again == 'N' || again == 'n') {
    system ("pause");
    return 0;
} else {
    again;      
}

这里在使用char输入时你正在使用scanf()

所以会给出字符输入和输入。 再次获取输入字符,但输入将保留在缓冲区中。

当while循环迭代时,等待用户名输入的获取将自动从缓冲区输入字符,因此将跳过用户名输入。

解决方案是在

之后添加getch()
scanf("%c", &again);

希望这会让你感到高兴。