2011-06-30 253 views
0

我只是想知道的東西。我有以下代碼:非終止while循環

#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

編譯器不會給您提示嗎? –

+0

如果我是編譯器,我會說「不能隱式轉換類型'int'到'bool'」或者「你不應該在'if'中設置一個變量」或者像「哎Emile wazzup爲什麼只用'if'中有一個'='?嘗試'=='。「 – Bastardo

+1

@JohnnyCageWins。我的編譯器(MSVC)說...沿線的東西... –

回答

7
if (counter = 1) 

這應該是

if (counter == 1) 

否則,你將你的計數器復位爲1的每個迭代。

4

一個常見的錯誤:

if(counter = 1) // assignment operator 

這將設置counter的價值1在每次迭代和循環永遠不會結束。

您應該使用

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

這是你的意思到底是什麼

4

if (counter = 1)抽調1應對每一個循環這是始終< 10

你想要if (counter == 1)

1

if (counter = 1) 

應該

if (counter == 1) 

,因爲你想比較,而不是分配價值。

1

你的第一個例子中有

if (counter = 1) 

,而不是

if (counter == 1) 

所以if語句會在每次迭代中計數器重置爲1。

3
if (counter = 1) 

這不比較counter1,其分配1counter,然後檢查counter - 我們正好被設置爲1所以它永遠是積極的,永遠是<= 10

0

如其他通知,這是一個常見的錯誤。您可以通過鍵入

if(1 == counter) 

代替

if(counter == 1) 

避免它,因爲

if(1 = counter) 

不會編譯(如果您做了錯誤,忘了一個 '=')。

+0

IIRC Debian hack通過將等式改爲賦值來實現。從那以後,它可能會倒退,但我是恆定價值比較的忠實粉絲。 – RobH

+0

個人意見,但我討厭和厭惡比構建。編譯時啓用警告將會捕獲這個特定的錯誤。代碼分析器將捕獲編譯器不會捕獲的實例,如if((counter = 1))...'不要讓我寫東西低音讚賞。 –

0

你的問題是在這裏:

if (counter = 1) 

分配,而不是比較。編譯更高的警告級別。

0
if (counter = 1) 

所以,counter值永遠是1。

0

您正在分配1來計數而不是比較它,請使用==代替=