2016-07-20 185 views
-1

今天我玩了一些代码(我是初学者)。我只写了一个简单的程序来制作一个三角形,其中的基础由用户的输入决定。如何绘制相反的三角形?

下面是代码:

#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

提示:在每一行迭代(新行)中添加一个常量的空格数。如你所见,空间不断重复。 –

+0

谢谢,我会试一试。 – ryanpback

回答

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; 
    } 

正如你看到的,在每一行,一旦你与策划做你*,然后我加空格一个常数,并执行新的for循环显示*作为triBase - lines次。

此外,最好将其视为具有行和列的2D表格,因此您的lines实际上是行,而rows实际上是列。

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; 
} 
+0

没有理由使用for循环来显示常量数量的空格。 –

+0

谢谢,我会解决这个问题。 – ryanpback

+0

查看@NathanOliver在评论中建议的内容 –