struct和rand()

时间:2010-06-03 17:31:48

标签: c

我有一个数组为100 int(b)的结构和一个int(a)

类型的变量

我有一个函数检查“a”的值是否在数组中,并且我已经生成了数组元素和带有随机值的变量。

但它不起作用 有人可以帮我解决吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct {
    int a;
    int b[100];
} h;

int func(h v){
    int i;

    for (i=0;i<100;i++){
        if(v.b[i]==v.a) 
            return 1;
        else 
            return 0;
    }

}

int main(int argc, char** argv)
{
    h str;
    srand(time(0)); 
    int i;
    for(i=0;0<100;i++){
        str.b[i]=(rand() % 10) + 1;
    }
    str.a=(rand() % 10) + 1;
    str.a=1;

    printf("%d\n",func(str));

    return 0;
}

3 个答案:

答案 0 :(得分:6)

您的检查函数在第一次循环迭代后返回。因此,除非您要查找的值是数组的第一个元素,否则它将返回0并且永远不会检查数组的其余部分。 'return 0'需要在循环体外

for (i=0;i<100;i++){
    if(v.b[i]==v.a) 
        return 1;
}
return 0; 

此外,main()中的for循环检查0 <100(这几乎总是真的......)

for(i=0;0<100;i++){
    str.b[i]=(rand() % 10) + 1;
}

应该是:

for(i=0;i<100;i++){
    str.b[i]=(rand() % 10) + 1;
}

答案 1 :(得分:0)

你的循环:

  for (i=0;i<100;i++){
        if(v.b[i]==v.a) 
        return 1;
        else 
        return 0;   
    }

应该是:

  for (i=0;i<100;i++){
        if(v.b[i]==v.a) 
            return 1;
    }
  return 0;   

这样您只有在检查完所有数组条目后才会失败。您可能还希望使用指针将结构传递给函数,以避免复制开销。

答案 2 :(得分:0)

在func中查看循环中的else条件。除非您正在寻找的项目位于第一位,否则它将永远找不到它。