2013-10-22 39 views
1

我正在設計一個C++類的程序,我正在使用,教授希望我們製作一個使用「*」輸出菱形的程序。我堅持的是我的程序輸出太多的行。爲什麼我的循環執行得太頻繁?

而不是

* 
*** 
* 

它輸出

* 
*** 
***** 
*** 
    * 

我將如何修改我的代碼得到這個工作?我一直在網上尋找答案,整個上午都沒有運氣。

這裏是我的代碼:

#include <iostream> 
using namespace std; 

int main() { 
    //Define Varaible 
    int N; 

    cout << "Please enter a postitive integer: "; 
    cin >> N; 
    cout << "Here is your diamond." << endl << endl; 

    for (int i = 0; i <= 2 * N; i++) { 
     for (int j = 0; j <= 2 * N; j++) { 
     if (i <= N) { 
      if (j < N - i || j > N + i) { 
       cout << ' '; 
      } 
      else { 
       cout << '*'; 
      } 
     } 
     else { 
      if (j < i - N || j > 3 * N - i) { 
       cout << ' '; 
      } 
      else { 
       cout << '*'; 
      } 
     } 
     } 
     cout << endl; 
    } 
    return 0; 
} 
+0

有了什麼輸入,你會得到那些「錯誤」的圖像?如果你得到1行太多並且不理解你自己的代碼(...?),添加「N = N-1;」某處。 – usr2564301

回答

0

你獲得比預期更多的行的原因是要創建2 * N + 1的行數,當你真正想要2 * N - 1

修復很簡單:在讀取輸入後,將N減1。

cin >> N; 
    assert(N > 0); 
    --N; 

這樣,其餘的代碼就不必更改了。

0

你應該記住,在區間[0,5](均包括在內)有6個元素,而不是5。所以,當你這樣做的循環和你想要做5次迭代,你通常會做兩種:

for(int i = 0; i < 5; ++i) // do stuff 

for(int i = 1; i <= 5; ++i) // do stuff 

當用C編程或C++第一版本更經常使用,因爲它適合數組索引和程序員有習慣使用該表格。 但正如我如果你之前說的:

for(int i = 0; i <= 5; ++i) // do stuff 

這將是6次迭代。