2010-06-03 77 views
1

我有100 int數組的結構體(b)和int類型的變量的(a)struct和RAND()

我有檢查一個函數,如果值 「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; 
} 

回答

6

您的檢查函數在第一次循環迭代後返回。因此,除非您要查找的值是數組的第一個元素,否則它將返回0並從不檢查數組的其餘部分。 「回覆0」需要是循環體

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

此外外,在中環主()檢查是否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; 
} 
+0

我有另一個問題...我沒有輸出 – teoz 2010-06-03 17:42:57

+0

剛剛更新了我的答案...你有第二個問題 – 2010-06-03 17:43:43

+0

對我的愚蠢錯誤抱歉 – teoz 2010-06-03 17:45:11

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; 

,所以你只表示您已檢查所有的數組項後失效。您可能還想使用指針將結構傳遞給函數,以避免複製開銷。

0

看func中循環的else條件。除非你正在尋找的物品處於第一個位置,否則它永遠不會找到它。