我想获得像
这样的输出*****
****
***
**
*
但我的代码输错了。 我的输出是:
Please enter the size: 9
*********
********
*******
******
*****
****
***
**
*
我的代码是:
#include<iostream>
using namespace std;
int main (void)
{
int row, column, size;
cout << "Please enter the size: ";
cin >> size;
cin.ignore(999,'\n');
for (row = size; row <= size; row--)
{
if (row <= 0)
{
break;
}
else if (row == size)
{
for (column = 1; column <= size; column++)
{
cout << "*";
}
}
else
{
for (column = row; column <= row; column--)
{
if (column <= 0)
{
break;
}
cout << ' ';
}
for (column = row; column <= row; column--)
{
if (column <= 0)
{
break;
}
cout << "*";
}
}
cout << endl;
}
cout << endl;
cout << "Please press enter to finish...";
cin.ignore(999,'\n');
return 0;
}
我不知道什么是错的,它在哪里,但我认为问题可能在于其他循环。
答案 0 :(得分:1)
尝试重新思考你的问题。你有很多复杂的代码来实现简单的东西。您的输出应如下所示:
*****
****
***
**
*
关于这一点需要注意的一些事项:
因此,您的代码应该很简单:
// PSEUDO CODE
for row = 0 to max_rows
for i = 0 to max_rows
if (i < row)
print a space
else
print a *
那应该这样做。
答案 1 :(得分:1)
你在这里做的是:
*
s作为第一行(大小)size - loopCounter
空格,则打印size - loopCounter
*
s 正如您所看到的,此算法无法为您提供所需的形状。另外为什么你向后循环并检查没有负值?你不需要它。你真正想要的是:
这里唯一重要的是如何生成每一行的数据。正如您所看到的,每行中的空格数等于列的索引(从0开始)。
这里有你可以尝试的东西(我将内循环分成两个循环):
#include<iostream>
using namespace std;
int main(void)
{
int size;
cout << "Please enter the size: ";
cin >> size;
cin.ignore(999, '\n');
for(int column = 0; column < size; ++column)
{
for(int spaces = 0; spaces < column; ++spaces)
{
cout << " ";
}
for(int starts = 0; starts < size - column; ++starts)
{
cout << "*";
}
cout << endl;
}
cout << "Please press enter to finish...";
cin.ignore(999, '\n');
return 0;
}