将一个值与数组的所有元素进行比较的函数的正确逻辑是什么?

What is the right logic for a function that compares one value against all elements of an array?

我正在用 C 语言编写一个 CRUD 程序,有一次要求用户输入员工代码,该代码之前存储在程序的员工注册部分中名为“codes”的数组中,以便注册员工的车辆。仅当用户输入与代码数组的元素相同时,程序才应继续。用户输入和数组元素的格式都正确,因此除了实际代码外应该没有区别。


我通过尝试将值 1234 作为员工代码进行调试,该代码已成功存储在代码数组中,然后我尝试通过键入 1234 来注册车辆,但我编写的函数始终进行检查 return 0,所以我认为逻辑上存在缺陷。

变量:

char codes[100][256];
char owner[256];

函数检查用户输入是否确实在数组代码的任何元素中,returns 1 如果找到匹配,或 0 在末尾。

int checkOwner(char t_code[])
{
    for (int i = 0; i < indice; ++i)
    {
        if(!strcmp(t_code, codes[i])) {
            return 1;
        }
    }
    return 0;
}

输入处理:

            do {
                printf("Type owner's code: ");
                fgets(owner, sizeof(owner), stdin);
                owner[strcspn(owner, "\n")] = '[=12=]';
                if(!checkOwner(owner))
                    printf("No employee with that code, try again.\n");
            } while(!checkOwner(owner));

我认为“逻辑缺陷”在于 for 语句:

for (int i = 0; i < indice; ++i)

从逻辑上我看出你想遍历你实际注册的所有代码。然而,在每次迭代中你想转到下一个“行”,但你只更新 i 一个。

for (int i = 0; i < indice; i+=256)

应该有望解决问题,尽管我认为此时条件 i < indice 会导致问题(然后您可以使用第二个变量来计算“行号”)

for (int i = 0, j = 0; j < indice; i+=256, ++j)

我还要明确地说:

if(strcmp(t_code, codes[i]) == 0)