struct и rand () - PullRequest
       24

struct и rand ()

1 голос
/ 03 июня 2010

У меня есть структура с массивом 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 ]

6 голосов
/ 03 июня 2010

Ваша функция проверки возвращается после первой итерации цикла. Поэтому, если искомое значение не является первым элементом массива, оно возвращает 0 и никогда не проверяет остальную часть массива. 'Return 0' должен быть вне тела цикла

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

Кроме того, цикл for в main () проверяет, является ли 0

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

Должно быть:

for(i=0;i<100;i++){
    str.b[i]=(rand() % 10) + 1;
}
0 голосов
/ 03 июня 2010

Посмотрите на условие else в цикле в func. Если искомый предмет не окажется на первой позиции, он его никогда не найдет.

0 голосов
/ 03 июня 2010

Ваш цикл:

  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;   

, чтобы вы потерпели неудачу только после того, как проверили все записи массива. Возможно, вы также захотите передать свою структуру в функцию, используя указатель, чтобы избежать накладных расходов на копирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...