登录验证c

时间:2016-11-03 01:11:30

标签: c

我使用signed long long int来计算用户输入的位数。如果ID和Pin不正确,程序应反复询问输入,并在输入正确的ID和Pin时显示“成功登录”。但是,当我输入正确的ID和Pin时,程序不断要求输入。我在代码中做错了什么?非常感谢帮助。

这是我的代码:

#include <stdio.h>

int main()
{
    long long n = 1234567,m = 123456;
    int count = 0, count2 = 0, c, a;

    do
    {
        printf("Enter student ID: ");
        scanf("%lli", &n);

        while (n != 0)
        {
            n /= 10;
            ++count;
        }

        if (count < 7 || count > 8)
            printf("The Student ID should be in 7 or 8 digits, please try again\n");

    } while(n != 1234567);


    do
    {
        printf("Enter security pin: ");
        scanf("%lli", &m);
        {
            c = a;
            a++;
        }

    while (m != 0)
    {
        m /= 10;
        ++count2;
    }

    if (count2 < 6 || count2 > 6) 
        printf("Please enter a 6-digit pin\n");

    if (a == 5)
    {
        printf("\nAccess Denied\n");
    }

    } while (m != 123456);

    if (n == 1234567 && m == 123456)
        printf("Successfully Login\n");
    else
        printf("Wrong password, try again\n");

    return 0;
}

1 个答案:

答案 0 :(得分:0)

问题在于逻辑:

scanf("%lli", &n);
while (n != 0)
        {
            n /= 10;
            ++count;
        }

即使用户在scanf中给出了正确的学生ID n = 1234567,它在这里被划分为n = n / 10 ---&gt;这将指定n = 123456。在代码中,由于while循环逻辑,n和m值永远不会等于正确的值。这同样适用于密码。 如果要检查密码长度和ID长度,最好使用字符串和atoi函数。