2017-04-20 7 views
0

これはこれまでのことですが、配列に奇数または偶数がある場合でも結果は常に1です。私は何をしていますか?ループについて配列の値が偶数かどうかをチェックし、真の場合はtrueを返します。

#include <stdio.h> 
#include <stdbool.h> 

int main(){ 
    int vector[10]={2,4,6,8,10,12,14,16,18,20}; 
    bool function(int i){ 
     for(i=0,i<10,i++){ 
      if(vector[i]%2==0){ 
       return true; 
       } 
      return false; 
      } 
     } 
    } 
} 
+0

のように宣言されなければならない考慮してください...すなわちあなたのコードは最初の要素の後に要素をチェックすることはありません。 – emlai

+1

*すべての*値が偶数であることを意味しますか? –

+0

AFAIKネストされた関数は非標準です。 –

答えて

1

エントリない,;を使用すべきです。あなたは決してループしていません。

for(i=0;i<10;i++) 

...

正直なところ、私はそれがループのための基本の要素が欠落しているとして、あなたのコンパイラはこの文に少なくとも警告を投げることを期待します。

次は、forループまたはそれが最初のエントリを過ぎて反復することはありません外にご

return false; 

を移動する必要があります。

最後にfunctionmainに定義することは、Cの標準ではありません。それを独自の機能にして、物事はより幸せになれます。

+0

私はあなた(カンマの問題を指摘してくれてありがとう、これはCの最初の日ですので、私は多くの間違いを犯しています)しかし、私はメインの空を残すべきか分かりません。これはプログラムをテストする正しい方法です?または私はちょうどメインをブール関数にして行くことができますか? とにかく結果はもう一度、私はおそらく不足しているものがあります。ファイルをビルドすると、CodeBlocksに警告が表示されません。 –

+0

ok、今私は間違っていたことを知っています。私はmain.cではなく、他のcファイルを編集していました。これが私が警告を受け取っていなかった理由で、これは変更に関係なく常に同じ結果を持っていた理由です –

1

最終的な反復で返すためです。配列全体をチェックしたら、falseを返してください。

また、関数が呼び出されることもなく、C semanticを使用して関数を更新することもできます。

#include <stdio.h> 
#include <stdbool.h> 

bool check_even(int vector[], int size){ 
    int i; 
    for(int i=0; i<size; i++){ 
     if(vector[i] % 2==0) { 
      return true; 
     } 
     // return false; shift this to out of for block 
    } 
    return false; 
} 


int main(){ 
    int vector[10]={2,4,6,8,10,12,14,16,18,20}; 

    bool is_even = check_even(vector, 10); // here function will get called 

    return 0 // always return with main 
} 
+0

forループが間違っています。 – ryyker

+1

@ryyker誤植。それを更新しました。 – Rahul

+0

私はあなたの提案に従ってみました。ファイルを実行すると、「Process returned 1(0x1)execution time:0.016 s」と表示されます。これは私が期待すべきことですか? –

4

C標準に従う場合、別の関数の中で関数を定義することはできません。

しかし、あなたの関数の主な問題(例えば、for文のような構文エラーは別として)は、配列の最初の要素のためにreturn文を奇数か偶数かに独立に使用しています。

プログラムは、以下の方法を見ることができます

#include <stdio.h> 
#include <stdbool.h> 

bool is_even(const int a[], size_t n) 
{ 
    size_t i = 0; 

    while (i < n && a[i] % 2 == 0) i++; 

    return i == n; 
} 

#define N 10 

int main(void) 
{ 
    int vector[N] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }; 

    printf("All elements are even: %d\n", is_even(vector, N)); 
} 

パラメータなしでC標準関数mainに応じてあなたは常に最初の反復に戻ってきている

int main(void) 
関連する問題