teoz
teoz

Reputation: 55

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;
}

Upvotes: 1

Views: 1617

Answers (3)

Josh Wright
Josh Wright

Reputation: 2505

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;
}

Upvotes: 6

zdan
zdan

Reputation: 29450

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.

Upvotes: 0

anon
anon

Reputation:

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.

Upvotes: 0

Related Questions