2013-07-29 56 views
1

我想在Linux機器上編譯和執行C++中的簡單代碼。但是程序停留在代碼的中間。我找不到原因。在C++編譯但在Linux中不執行的簡單代碼

下面是代碼

#include <iostream> 

using namespace std; 
int n; 
int product =1; 
int counter =0; 
int p; 
int main() 
{ 
    //return 1; 
    cout << "How many numbers?" << endl; 
    cin >> n ; 
    cout << "Input the numbers " << endl; 
    for(int i=0;i<n;i++) 
     { 
       cin >> p; 
       product = product*p; 
       int p = 1; 
     } 
     cout << "Now our number to be factorised is " << product << endl; 
     cin >> p; 
     for(int i=1;i=product;i++) 
     { 
     if(product%i==0) 
     counter++; 
     } 
     cout << "the number of factors is " << counter << endl; 
      return 0; 
} 

代碼卡,在「現在我們的數字被因式分解是」產品。它計算產品,但沒有進展的更多

+0

它計算*產品*,但不會再進一步​​ –

+0

您應該使用調試器來遍歷代碼,看看它卡在哪裏。你可以遍歷'for'循環,看看爲什麼條件總是成立。 –

+0

在第二個循環中使用'for(int i = 1; i == product; i ++)'而不是'for(int i = 1; i = product; i ++)' – AminM

回答

10

因爲無限循環,在第二個for循環,你有拼寫錯誤==

for(int i=1;i=product;i++) 
      ^
       should be == 

旁註:要最大限度地減少這類錯誤的代碼我建議你保持表達空間,例如一個表達式i=product應該寫成i = product,這樣它就可讀。同樣,您應該在;,之後添加空格。

+1

坦白說,我很驚訝編譯器沒有警告對這個。 OP,嘗試用'-Wall'建設 – Useless

+1

非常感謝。之前我已經糾正了這個錯誤,但是當我在編譯時再次粘貼整個代碼時,我忘了再次進行修改。愚蠢的錯誤:D:D:P 謝謝。 –

+0

@Useless因爲'='是正確的表達方式,就像'我,產品' –

0

它看起來喜歡你在這條線一個錯字:不是邏輯的equals(==

for(int i=1;i=product;i++) 
      ^

您使用分配(=)。所以這實際上是一個無限循環,因爲這個表達式的結果是true

+0

非常感謝。之前我已經糾正了這個錯誤,但是當我在編譯時再次粘貼整個代碼時,我忘了再次進行修改。愚蠢的錯誤:D:D:P 謝謝。 –