如何使用 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;
}
}
您需要根据接受密码数组中的所有十个值测试滑动值。
例如,如下所示
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
除了@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 %dn", j, PORTD);
}
}
if(swipe == a[i])
.这将调用未定义的行为,因为i
是 10,而 10 是越界索引。有效索引为 0 到 9。
您正在尝试模拟随机读卡操作并在不同的实例中获得通过/失败。滑动值介于 1 到 20 之间,密码仅在 10、19 范围内,您希望查看某些实例是否失败。这是对的吗?
如果是这样,考虑到您的 rand() 函数只返回整数,设置断点并探测滑动值。它似乎总是具有相同的价值。使 rand() 函数更好地用于更广泛的统计分布。有许多来源可以生成随机整数,例如线性同余方法等。
此外,应该对数组的每个值循环比较。