2012-05-12 63 views
0

我有一個問題,如下所述: 我有一個數組(例如)a [] = {10,24,56,33,22,11,21} 我有類似這不同的if()語句的參數

for(i=0;i<100;i++){ 
    if(a[i]==10) 
     // do something 
} 

下一個i = 1時

if(a[i]==10 && a[i+1]==24) 

等等所以在每次迭代的參數/內是否應該改變 條件現在這將是一個非常大的順序,我不能明確地寫
if(a[i]==10 && a[i+1]==24 && a[i+2]==56 ...... a[i+100]=2322)

我該如何實現這種變化的條件?

+2

您的問題陳述不明確。我懷疑你必須在許多條件下使用循環來代替你的if語句。 –

+0

我們可以假設所顯示的輸入不是真實的輸入,還是所有這些都會超出數組邊界? – pmr

+1

該計劃的目標是什麼? –

回答

1

你必須有一個累積的「布爾」變量,檢查A [1]在第i次迭代並更新該變量:

int a[] = {...}; /* array with some values to verify */ 
int v[] = {...}; /* these are the actual desired values in a[] */ 

/* the verifying loop */ 
int i; 
int cond = 1; 
for (i = 0; i < 100; i++) 
{ 
    cond = cond && (a[i] == v[i]); 
    if (cond) 
    { 
     /* do something */ 
    } 
} 
1

有一個循環內的循環:

for (i = 0; i != 100; ++i) 
{ 
    int condition = 1; 
    for (j = 0; i + j != 100 && condition; ++j) 
    { 
     condition = condition && (a[i + j] == /* your number */); 
    } 
    if (condition) { /* ... */ } 
} 
+0

C有一個'bool'。 –

+0

在'for(j = 0; i + j!= 100; ++ j)循環中,您可以添加優化條件if(!condition)break;'。更好的做法是使用'i <100'而不是'i!= 100'。 – gumik

+0

開始時條件必須是「1」。如果它是'0',那麼它永遠不會變成'1', – gumik

1

我認爲你應該出臺一個布爾值。

bool valid = true; 

for(i=0;i<100;i++){ 
    if(a[i]==10 && valid) 
     // do something 
    else 
    { 
     valid = false; 
     break; 
    } 
} 

每次迭代,你需要改變的值到您比較a[i]

+1

'boolean'不是C類型。使用'bool'或'_Bool'。 –

+0

如果您必須在循環內手動輸入每個值,「有效」有什麼意義? –

0

在這種情況下,你可以使用函數指針或塊。 你可以在這裏找到一個很好的例子here

0

看到你的例子,我認爲你所談論的變化只是在數組'a'的長度,你想檢查一些數組x的存在。如果確實如此,memcmp可以對你有用。

讓我修改你的例子來澄清我在說什麼。

int a [7] = {10,24,56,33,22,11,21}是您希望在某個數組'x'中檢查所需的值,每次使用不同長度的'a'與「X」聲明

int x[1000]; 

在這種情況下,你可以使用memcmp如下: -

for (len = 1 ; len <= 7 ; ++len) 
{ for (i = 0 ; i <= 1000-len ; ++i) 
    { if (! memcmp(a, x+i, len * sizeof(int))) 
    { // do something 
    } 
    } 
}