为什么我的循环执行太频繁?

时间:2013-10-22 17:26:33

标签: c++ loops while-loop

我正在为我正在制作的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;
}

2 个答案:

答案 0 :(得分:0)

您获得的行数超出预期的原因是您实际需要2 * N + 1时创建2 * N - 1行数。

修复很简单:在阅读输入后将N减1。

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

这样,您的其余代码就不必更改。

答案 1 :(得分: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次迭代。