2017-10-09 11 views
-1

私はもちろん入門C++にいるよ、とこのプロンプトに問題が午前:コードが無限ループに入る、わからないなぜ

「は、標準入力からの正の整数を読み込み、ループを書くと、それはときに終了ループが終了すると、読み込まれた偶数の整数の総和、読み込まれた奇数の整数の総和、読み込まれた偶数の整数の数、および偶数の整数の合計が出力されます。読み込まれた奇数の数。すべてが1つのスペースで区切られています。必要な変数を宣言してください。

int num = 0; 
int evens = 0; 
int odds = 0; 
int evenSum = 0; 
int oddSum = 0; 

do { 
    cin >> num; 
    if (num % 2 == 0){ 
     evens++; 
     evenSum += num; 
    } 
    else if (num > 0) { 
     odds++; 
     oddSum += num; 
    } 
    else { 
     num = -1; 
    } 
} 
while (num >= 0); 
cout << evenSum << " " << oddSum << " " << evens << " " << odds; 

私は除いて何のフィードバックを得るん:autograderから「失敗:コード無限ループに入る」次のように

私のソリューションです。私は間違って何をしていますか?

+0

このスニペットの周りにテストフレームワークを構築し、開発環境に付属のデバッガで実行します。無限ループは通常、トラップして識別するのが非常に簡単です。 – user4581301

+1

1つのことが間違っていますが、無限ループではなく、割り当て仕様との違いです。「正でない整数を読み込むと終了します。このプログラムは、負の数を処理してループを終了しようとします。 – user4581301

+0

は、提供されたコードでオンラインコンパイラを使用しています。 – xyious

答えて

-2

ループ内でnumが陽性になることはありません。あなたのやっていることは他の変数を変えています。すでに負の場合はnumを-1に再割当てする必要はありません。

あなたはこれを追加する必要があります。

else if (num > 0) { 
    odds++; 
    oddSum += num; 
    num = 1; //becomes positive and breaks the loop. 
} 
+0

なぜ私の答えは下降していますか? –

1

ます。また、このif (num % 2 == 0)部分で負の数を処理しています、(例えば、第1の負の整数のために遭遇し、この条件はまた、真例えば-6になります)、それによってevensをインクリメントし、この負の数をevenSumに加えてください。これはあなたの質問の要件に従って行われていません。他のことは、elseの部分が必要ではないということです。なぜなら、-1をnumに代入するのではなく、ちょうどあなたが読んだのと同じ番号のままにするということです。

私はあなたのelse ifelse部分は次のように変更する必要があると思う:

#include <iostream> 

using namespace std; 

int main(){ 

int num; 
int evens = 0; 
int odds = 0; 
int evenSum = 0; 
int oddSum = 0; 

while (true) { 
    cin >> num; 

    if (num < 0){ 
     break; 
    } 

    if (num % 2 == 0){ 
     evens++; 
     evenSum += num; 
    } 
    else { 
     odds++; 
     oddSum += num; 
    } 
} 

cout << evenSum << " " << oddSum << " " << evens << " " << odds; 
return 0; 
} 

break、入力、if num < 0から数値を取っておいてくださいとの結果を示し、番号のelseチェックがoddまたはevenのいずれかであることそれに応じてカウンタをインクリメントする。

+0

OPのコードが機能しない理由についても説明しなければなりません。 – CinCout

+0

@CinCoutは私の答えを編集して説明を追加しました:) – tkhurana96

+0

*「私はあなたが今読んだ数字を減らす理由を意味します」。 OPは '-1'を' num'に割り当てるのであって、*減らすのではありません。 – CinCout

-2

あなたのループのwhile部分は、否定的な答えが入力されるまで続行されます。どこから番号を取得していますか?ユーザー入力?あなたの宣言はそれを0にしました。これは、条件が> =であるためにあなたのwhileループを継続させています。ユーザーの入力が必要な場合は、あなたのcinを処理するcoutステートメントが必要です。

関連する問題