将一个值与数组的所有元素进行比较的函数的正确逻辑是什么?
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)
我正在用 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)