c - c中的登录验证

标签 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;
}

最佳答案

这里的问题在于逻辑:

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

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

关于c - c中的登录验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392283/

相关文章:

c - 在 C 中重新声明为不同类型的符号错误

python - 如何编写基于 C 的模块来处理 python 字典?

c - 按位移位*负数以反转数字中的位

c - 在堆数组上使用数组初始化符号

c++ - 格式错误的 C 或 C++ 程序是否保证在 Visual Studio 中的 DEBUG 配置下崩溃

c - IOCCC 1987/weSTLey.c - GCC 的左值问题

c - 将 DLL 加载到用户定义的地址

c++ - 如何使用 printf 打印 "%"字符

c - 多维数组作为结构体成员的内存分配 C

c - 等待超时信号,如果收到信号则继续执行(没有与信号关联的操作)