2016-07-19 14 views
-4
#include <iostream> 
using namespace std; 
int main() 
{ 
int i,t,x[20], even, odd, prime; 
cout << "Enter 20 integer numbers from 0 to 99: "<<endl; 
for (i=1;i<=20;i++) 
{ 
    cout << "Input " << i <<":"; 
    cin >> x[i]; 
} 
cout << "\nPrime numbers are: " << endl ; 
prime=1; 
for (i=2; i<=20 ; i++) 
{ 
    for(t=2;t<x[i];t++) 
    { 
     if(x[i]%t==0) 
     { 
      prime=0; 
     } 
    } 
    if(prime==1) 
    { 
     cout << x[i] << endl; 
    } 
    prime=1; 
} 
for(i=1; i<=20; i++) // this is where i have problem. 
{ 
    if(x[i]% 2 == 0) 
    { 
     even++; 
    } 
    else 
    { 
     odd++; 
    } 
} 
cout << "Number of odd numbers: " << odd << "\n"; 
cout << "Number of even numbers: " << even << "\n"; 
return 0 ; 
} 

コンパイルすると、0から19まで0の入力に対して偶数(40)と奇数(10)が表示されます。私が間違ってやっているのは分かりません。誰かがコードを改善するのに役立つことを願っています。ユーザーの入力から、奇数と偶数の合計。 0から99の間の数字を入力してください。

+2

プログラムをデバッグしたときに何を見つけましたか? – user2079303

+0

合意。素数発見コードを削除し、偶数/奇数を決定することとは関係なく、開発環境のデバッガでステップ実行を開始します。デバッガはありませんか?時間を無駄にしないで、デバッガで開発システムを入手してください。ほぼすべてが行います。 – user4581301

+0

この 'x [20]'と 'for(i = 1; i <= 20; i ++)'は一緒に動かない – DimChtz

答えて

0

変数evenおよびoddは決して既知の値に設定されないため、正式にそれらの値を読み取ることはできません。そうすることで、最も悪名高いStandardeseの概念が呼び出されます:未定義の動作。したがって、これらの変数の値は正当なものか間違っている可能性があります。変数とそれらを読み取ろうとするすべてのコードは、あなたのプログラムから完全に最適化することができます。または何かが起こる可能性があります。これらの変数に何か正しいことを当てにすることはできません。それらを読み取ろうとすると、あなたのプログラムは不正な形になります。今は想像もしていないことを含め、何かをすることができます。

あなたはこれらの概念に関する豊富な背景情報を検索する必要がありますが、私はここでかなりまともな要約たと思うのが好き:またhttps://stackoverflow.com/a/38150162/2757035

を、トーマスはコメントで指摘するように、あなたはどのように理解していないように見えます配列のインデックス作成作業:インデックスは0ベースです。したがって、int i[20]は、0から19の番号の20要素を宣言します。配列の一部ではないインデックス20にアクセスしようとします。したがって、です。未定義の動作です。

+0

指摘していただきありがとうございました。病気のコードを改善してください。それは今働いています... –

+0

あなたを歓迎し、確認していただきありがとうございます。これが有用であればupvotingを検討し、あなたの質問を解決した場合は答えとしてマークしてください。 –

+0

それは私の質問を解決した...ありがとう –

関連する問題