为什么我的循环执行得太频繁? 我正在设计一个C++类的程序,教授要我们制作一个用*输出钻石形状的程序。我一直坚持的是我的程序输出了太多的行

为什么我的循环执行得太频繁? 我正在设计一个C++类的程序,教授要我们制作一个用*输出钻石形状的程序。我一直坚持的是我的程序输出了太多的行,c++,loops,while-loop,C++,Loops,While Loop,而不是 * *** * 它正在输出 * *** ***** *** * 我将如何修改代码以使其正常工作?我整个上午都在网上搜索答案,运气不好 这是我的密码: #include <iostream> using namespace std; int main () { //Define Varaible int N; cout << "Please enter a postitive integer: "; cin &g

而不是

 *
***
 *
它正在输出

  *
 ***
*****
 ***
  *
我将如何修改代码以使其正常工作?我整个上午都在网上搜索答案,运气不好

这是我的密码:

#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*N+1行数,而实际需要2*N-1行数

解决方法很简单:读取输入后,将N减小1

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

这样,代码的其余部分就不必更改了。

您应该记住,在[0,5]范围内(包括[0,5])有6个元素,而不是5个元素。因此,当您执行循环并希望执行5次迭代时,通常会执行以下操作之一:

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

当C或C++编程时,第一个版本经常使用,因为它适合数组索引,程序员习惯使用这种形式。 但正如我之前所说,如果你这样做:

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

这将是6次迭代。

通过什么输入,您会得到错误的图像?如果你得到了太多的一行并且不理解你自己的代码…?,添加N=N-1;在某处
for( int i = 0; i <= 5; ++i ) // do stuff