tags:

views:

49

answers:

3
+1  Q: 

struct and rand()

I have a struct with an array of 100 int (b) and a variable of type int (a)

I have a function that checks if the value of "a" is in the array and i have generated the array elements and the variable with random values.

but it doesn't work can someone help me fix it?

#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;
}
+6  A: 

Your check function returns after the first loop iteration. So unless the value you're looking for is the first element of the array, it returns 0 and never checks the rest of the array. The 'return 0' needs to be outside the body of the loop

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

Additionally, the for loop in main() checks to see if 0<100 (which will pretty much always be true...)

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

Should be:

for(i=0;i<100;i++){
    str.b[i]=(rand() % 10) + 1;
}
Josh Wright
I have another problem ... I get no output
teoz
Just updated my answer... you had a second issue
Josh Wright
OMG sorry for my stupid errors
teoz
A: 

Your loop:

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

should be:

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

so that you only fail after you have examined all the array entries. You might also want to pass your struct to the function using a pointer, to avoid the copying overhead.

anon
A: 

Look at the else condition in the loop in func. Unless the item you are looking for is in the first position, it will never find it.

zdan