我正在尝试在调用例程中打印作为参数传递的金额大小的钻石,如果该数字甚至更改为从零开始的下一个最高奇数。 如果未传递任何数量或字符类型,则该函数具有默认参数。我可以打印出一个仅以奇数行输出符号的钻石,但是我希望它能够打印出奇数行的符号,这些符号传递到最大行数。我的问题是它打印的行数等于传递的数量,给每行只有奇数个符号而不是只有奇数量的行,直到传递的数量。即我将它传递给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;
}
}
}
答案 0 :(得分:0)
首先,你的一些逻辑错了。如果您确定要评估为if ( max % 2 )
,请使用true
。
其次,你的变量有坏名字。完全不清楚line
和shape
应该代表什么(当然不是线条和形状)。
第三,你试图一次做太多。尝试更简单的事情。对于5的参数,而不是试图产生这个:
*
***
*****
***
*
首先尝试更简单的方法,例如:
*
***
*****
或者这个:
*
***
*****
或者这个:
1
3
5
此外,习惯于将偶数和奇数视为2n
和2n+1
。这应该足以让你超越驼峰。