-1

我正在尝试打印一个钻石,其大小与在调用例程中作为参数传递的数量相同,如果该数字是偶数,则将其更改为从零开始的下一个最高奇数。如果没有传递数量或字符类型,则该函数具有默认参数。我可以打印一个仅以奇数行输出符号的菱形,但我希望它打印传递到最大行数的奇数行符号。我的问题是它打印的行数等于传递的数量,每行仅给出奇数数量的符号,而不是仅给出奇数数量的行,直到传递的数量。即,我将它传递给 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;
      }
   }
}
4

1 回答 1

0

首先,您的某些逻辑看起来是错误的。您if ( max % 2 )在确定评估为 时使用true

其次,您的变量名称不好。目前还不清楚什么lineshape应该代表什么(当然不是一条线和一个形状,分别)。

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

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

首先尝试一些更简单的方法,如下所示:

  *
 ***
*****

或这个:

*
***
*****

或这个:

1
3
5

此外,习惯于将偶数和奇数视为2n2n+1。这应该足以让你度过难关。

于 2013-07-15T02:13:03.127 回答