我今天正在玩一些代码(我是初学者)。我刚写了一个简单的程序来制作一个三角形,其中基数由用户的输入决定。
以下是代码:
#include "main.h"
using namespace std;
int main()
{
int triBase = 0;
cout << "Enter a base number for the triangle [1-100]: ";
cin >> triBase;
cout << endl;
while(!cin || triBase > 100 || triBase <= 0)
{
system ("clear");
cout << "Invalid input!" << endl;
cin.clear();
cin.ignore(10, '\n');
cout << "Enter a base number for the triangle [1-100]: ";
cin >> triBase;
cout << endl;
}
system ("clear");
for(int lines = 0; lines < triBase; lines++)
{
for(int rows = 0; rows <= lines; rows++)
{
cout << "* ";
}
cout << endl;
}
return 0;
}
我的问题是,如何让三角形以相反的顺序出现在屏幕的另一侧?例如,用户输入5,屏幕显示:
* *****
** ****
*** ***
**** **
***** *
或者如果他们输入12:
* ************
** ***********
*** **********
**** *********
***** ********
****** *******
******* ******
******** *****
********* ****
********** ***
*********** **
************ *
有没有办法知道角色可以如何适应屏幕,减去适合该行的字符数,然后在空格中添加差异,以便它们在正确的位置开始,以便每行在屏幕的最后一个位置结束?提前谢谢。
答案 0 :(得分:3)
这应该有效:
for (int lines = 0; lines < triBase; lines++)
{
for (int rows = 0; rows <= lines; rows++)
{
cout << "* ";
}
cout << std::string(30, ' '); // 30 spaces
for(int i = 0; i < triBase - lines; i++)
{
cout << "* ";
}
cout << endl;
}
如您所见,在每一行上,一旦完成绘制*
,我就会添加一个const数量的空格并执行一个新的for循环以将*
显示为{{{ 1}}次。
此外,最好将其视为包含行和列的2D表格,因此triBase - lines
实际上是行,而lines
实际上是列。
答案 1 :(得分:1)
我能够让它发挥作用。这是最终的代码:
#include "main.h"
using namespace std;
int main()
{
int triBase = 0;
string spaces(30, ' ');
cout << "Enter a base number for the triangle [1-100]: ";
cin >> triBase;
cout << endl;
while(!cin || triBase > 100 || triBase <= 0)
{
system ("clear");
cout << "Invalid input!" << endl;
cin.clear();
cin.ignore(10, '\n');
cout << "Enter a base number for the triangle [1-100]: ";
cin >> triBase;
cout << endl;
}
system ("clear");
for(int lines = 0; lines < triBase; lines++)
{
for(int rows = 0; rows <= lines; rows++)
{
cout << "* ";
}
cout << spaces;
for(int secondRow = 0; secondRow < triBase - lines; secondRow++)
{
cout << "* ";
}
cout << endl;
}
return 0;
}