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