将单个整数与 C 中的整数数组进行比较?
Compare a single integer against an array of integers in C?
如何使用 C 语言将单个整数与十个整数的数组进行比较,以确定单个整数是否包含在数组中?如果原始问题不清楚,我深表歉意,而滑动等于数组中的任何数字我想输出 PORTD=0b10000000。谢谢!
short a[10]={10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; //Array of accepted passwords.
short array[10];
int i;
for(i=0; i<10; i++){
array[i]=a[i];
}
srand(clock());
while(1){
int swipe=rand() % 20; /* Simulated code read from card swipe, in this
* instance we used a random number between
* 1 and 20.*/
for(i=0; i<10; i++){
if(swipe == array[i]) {
PORTD=0b10000000;
} else {
PORTD=0b00001000;
} //If swiped code evaluates as one of the approved codes then set PORTD RD7 as high.
}
char Master=PORTDbits.RD7;
这似乎已经解决了...感谢您的帮助!
for(i=0; i<10; i++){
if(swipe == array[i]) {
PORTD=0b10000000;
break;
} else {
PORTD=0b00001000;
}
}
if(swipe == a[i])
。这会调用未定义行为,因为 i
是 10,而 10 是越界索引。有效索引是从 0 到 9。
除了@kaylum 的回答...
因为是循环调用rand()
,所以进入循环前需要先调用srand()
,
srand(clock());//for example
while(1){
LATD=0x00;
int swipe=rand() % 20;
...
如果不这样做,每次执行时得到的随机数将是相同的值序列。
此外,如果i
在用于比较之前没有重新初始化,它就是== 10。它需要在用作你的数组索引之前重新设置...
此外,在您的代码中,您似乎想要根据 10 个已接受的密码检查最新的随机数。如果这是正确的,您必须比较所有 10 个:
int main(void)
{
srand(clock());//for example
j = 0;
while(1)
{
int swipe=rand() % 20;
PORTD=0b00000000;
for(i=0;i<10;i++)
{
j++;
if(swipe == array[i])
{
PORTD=0b10000000;
break;
}
}
//to show ratio of legal to illegal passcodes...
printf("times through: %d Value of PORTD %d\n", j, PORTD);
}
}
您需要根据接受的密码数组中的所有十个值测试您的刷卡值。
例如如下图
for(i=0; i<10; i++)
if(swipe == array[i]) {
set a true flag (and maybe exit the for loop)
}
Depending on the flag, set the output
您正在尝试模拟随机读卡动作并在不同的实例中同时获得 Pass/Fail。使用 1 到 20 之间的滑动值和仅在 10、19 范围内的密码,您想要查看某些实例是否失败。对吗?
如果是这样,考虑到您的 rand() 函数 returns 只有整数,请设置一个断点并探测滑动的值。它似乎总是具有相同的价值。使 rand() 函数更好以实现更广泛的统计分布。有很多来源可以生成随机整数,例如线性同余法等。
此外,应该对数组的每个值进行循环比较。
如何使用 C 语言将单个整数与十个整数的数组进行比较,以确定单个整数是否包含在数组中?如果原始问题不清楚,我深表歉意,而滑动等于数组中的任何数字我想输出 PORTD=0b10000000。谢谢!
short a[10]={10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; //Array of accepted passwords.
short array[10];
int i;
for(i=0; i<10; i++){
array[i]=a[i];
}
srand(clock());
while(1){
int swipe=rand() % 20; /* Simulated code read from card swipe, in this
* instance we used a random number between
* 1 and 20.*/
for(i=0; i<10; i++){
if(swipe == array[i]) {
PORTD=0b10000000;
} else {
PORTD=0b00001000;
} //If swiped code evaluates as one of the approved codes then set PORTD RD7 as high.
}
char Master=PORTDbits.RD7;
这似乎已经解决了...感谢您的帮助!
for(i=0; i<10; i++){
if(swipe == array[i]) {
PORTD=0b10000000;
break;
} else {
PORTD=0b00001000;
}
}
if(swipe == a[i])
。这会调用未定义行为,因为 i
是 10,而 10 是越界索引。有效索引是从 0 到 9。
除了@kaylum 的回答...
因为是循环调用rand()
,所以进入循环前需要先调用srand()
,
srand(clock());//for example
while(1){
LATD=0x00;
int swipe=rand() % 20;
...
如果不这样做,每次执行时得到的随机数将是相同的值序列。
此外,如果i
在用于比较之前没有重新初始化,它就是== 10。它需要在用作你的数组索引之前重新设置...
此外,在您的代码中,您似乎想要根据 10 个已接受的密码检查最新的随机数。如果这是正确的,您必须比较所有 10 个:
int main(void)
{
srand(clock());//for example
j = 0;
while(1)
{
int swipe=rand() % 20;
PORTD=0b00000000;
for(i=0;i<10;i++)
{
j++;
if(swipe == array[i])
{
PORTD=0b10000000;
break;
}
}
//to show ratio of legal to illegal passcodes...
printf("times through: %d Value of PORTD %d\n", j, PORTD);
}
}
您需要根据接受的密码数组中的所有十个值测试您的刷卡值。
例如如下图
for(i=0; i<10; i++)
if(swipe == array[i]) {
set a true flag (and maybe exit the for loop)
}
Depending on the flag, set the output
您正在尝试模拟随机读卡动作并在不同的实例中同时获得 Pass/Fail。使用 1 到 20 之间的滑动值和仅在 10、19 范围内的密码,您想要查看某些实例是否失败。对吗?
如果是这样,考虑到您的 rand() 函数 returns 只有整数,请设置一个断点并探测滑动的值。它似乎总是具有相同的价值。使 rand() 函数更好以实现更广泛的统计分布。有很多来源可以生成随机整数,例如线性同余法等。
此外,应该对数组的每个值进行循环比较。