C ++ for循环菱形只有负数

时间:2013-07-15 01:34:47

标签: c++

我正在尝试在调用例程中打印作为参数传递的金额大小的钻石,如果该数字甚至更改为从零开始的下一个最高奇数。 如果未传递任何数量或字符类型,则该函数具有默认参数。我可以打印出一个仅以奇数行输出符号的钻石,但是我希望它能够打印出奇数行的符号,这些符号传递到最大行数。我的问题是它打印的行数等于传递的数量,给每行只有奇数个符号而不是只有奇数量的行,直到传递的数量。即我将它传递给5并且它将打印五个单独的行,从一个符号开始,然后是三个符号,然后是五个符号,然后是七个符号,然后是九个符号。我似乎无法让我的大脑了解如何区分线量和符号数量。欢迎任何帮助,这是一个家庭作业,所以只需要我背后的逻辑,所以我可以弄清楚。谢谢。这是我现在的代码。如果有意义的话,使用Eclipse作为编译器。

#include <iostream>
#include <cstdlib>
#include <cctype>
#include <iomanip>
using namespace std;

// prototype for printDiamond
void printDiamond ( int = 1, char = '*' );

int main()
{
   printDiamond();
   cout << endl;
   printDiamond(1);
   cout << endl;
   printDiamond(2);
   cout << endl;
   printDiamond(3);
   cout << endl;
   printDiamond(4);
   cout << endl;
   printDiamond(5);
   cout << endl;
   printDiamond(1, '$');
   cout << endl;
   printDiamond(2, '$');
   cout << endl;
   printDiamond(3, '$');
   cout << endl;
   printDiamond(4, '$');
   cout << endl;
   printDiamond(5, '$');
   cout << endl;

   int someSize = 10;
   char someSymbol = ' ';
   printDiamond(someSize, someSymbol);
   cout << endl;

   return EXIT_SUCCESS;
}
void printDiamond ( int max, char symbol)
{

   if ( symbol == ' ')
      symbol = '*';
   if ( max % 2 == 0 )
            ++max;

   int shape,line;

   if ( max >= 0 )
   {

      if ( max % 2 )
      {

         for (shape=1;shape <= max ;shape++)
         {

            for (line = shape; line < max; line++)
            {
               cout << " " ;
            }

            for (line=1; line <= shape+shape-1; line++)
            {
               cout << symbol ;
            }
            cout << endl;

         }
      }
   }
   else
   {
       cout << "Input error. This function not defined for a negative integer.";
   }

   if ( max % 2 )
   {

      for (shape=max-1;shape >= 0 ;shape--)
      {

         for (line=shape;line<max;line++)
         {
            cout << " " ;
         }

         for (line=1;line <= shape+shape-1; line++)
         {
            cout << symbol ;
         }

         cout << endl;
      }
   }
}

1 个答案:

答案 0 :(得分:0)

首先,你的一些逻辑错了。如果您确定要评估为if ( max % 2 ),请使用true

其次,你的变量有坏名字。完全不清楚lineshape应该代表什么(当然不是线条和形状)。

第三,你试图一次做太多。尝试更简单的事情。对于5的参数,而不是试图产生这个:

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

首先尝试更简单的方法,例如:

  *
 ***
*****

或者这个:

*
***
*****

或者这个:

1
3
5

此外,习惯于将偶数和奇数视为2n2n+1。这应该足以让你超越驼峰。