2011-06-30 11 views
0

私は何か不思議だった。私は次のコードを持っています:非終了中のループ

#include <iostream> 
using namespace std; 

int main() 
{ 
    int number, largest, counter = 1; 
    while (counter <= 10) 
    { 
      cout << "Enter a number: "; 
      cin >> number; 
      if (counter = 1) 
      { 
       largest = number; 
      } 
      else if (number > largest) 
      { 
       largest = number; 
       } 
      counter++; 
    } 
    cout << "\n\nThe largest number is: " << largest; 
    system("pause"); 
    return 0; 
} 

事は決して終わりません。コードを少し修正することで問題を解決することができましたが、なぜこのようなことが起こったのか不思議でした。固定コードは次のとおりです。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int number, largest, counter = 1; 
    cout << "Enter a number: "; 
    cin >> number; 
    largest = number; 
    while (counter < 10) 
    { 
     cout << "Enter a number: "; 
     cin >> number; 
     if (number > largest) 
     { 
      largest = number; 
     } 
     counter++; 
    } 
    cout << "\n\nThe largest number is: " << largest << endl; 
    system("pause"); 
    return 0; 
} 

else ifステートメントを削除したようです。何が起こった?

+0

は、コンパイラはあなたに警告を与えるものではありません= ==の代わりに、使用するカウンタに1を割り当てるのではなく、それを比較していますか? –

+0

私がコンパイラであれば、「暗黙のうちに 'int'を' bool'に変換することはできません。あるいは '' if''などの変数を設定しないでください。 'if'の '='で '?=' 'を試してください。" – Bastardo

+1

@ JohnnyCageWins。私のコンパイラ(MSVC)は、行に沿って何かを言っています... –

答えて

7
if (counter = 1) 

これは、そうでなければ、あなたは1各反復にあなたのカウンタをリセットするつもりだ

if (counter == 1) 

でなければなりません。あなたが値を代入するのではなく、比較したいので、

4

よくある間違い:

if(counter = 1) // assignment operator 

これは、各繰り返しで1counterの値を設定し、ループが終了したことがありません。

あなたは

4

if (counter = 1)が、これは常に< 10ているすべてのループに対抗するために1を再割り当てする意味正確に何である

if(counter == 1) // equality operator 
      ^^^^ 

を使用する必要があります。

あなたはif (counter == 1)が必要です。

1

ライン

if (counter = 1) 

if (counter == 1) 

であるべき。

1

あなたの最初の例では、

if (counter = 1) 

代わりの

if (counter == 1) 

ので、if文は、各反復の間にカウンタを1にリセットするを持っていました。

3
if (counter = 1) 

これはcounter1を比較しません、それはcounter1を割り当て、その後、counterをチェック - 私達はちょうど1に設定するので、それは常に正で、常に<= 10されます。

0

これは一般的なエラーです。(あなたがエラーをしたし、 '=' 忘れてしまった場合)あなたは、コンパイルされないでしょう

if(1 = counter) 

ので、代わりに

if(counter == 1) 

if(1 == counter) 

を入力して、それを避けることができます。

+0

IIRC Debianのハックは、等価を代入に変更することによって実装されました。それ以来、それは後ろ向きに見えるかもしれませんが、私は定数と左辺比較の大きなファンです。 – RobH

+0

個人的な意見ですが、私は構成よりも嫌いです。警告を有効にしてコンパイルすると、この特定のエラーが発生します。コードアナライザは、if((counter = 1))...のようなコンパイラがキャッチしないインスタンスをキャッチします。 –

0

あなたの問題はここにある:

if (counter = 1) 

割り当て代わりの比較。より高い警告レベルでコンパイルします。

0
if (counter = 1) 

したがって、counterの値は1です。

関連する問題