2013-10-22 41 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次迭代。