0

我以前问过这样的问题,但它有点误导,因为我没有包括打印订单。因为我了解了整个概念的变化,我认为再问一次会更合适。

 #include <iostream>
    using namespace std;
    int main()
    {
        int a, b, c, i;
        cin >> a >> b >>  c;

        for ( i = 0;  i < a; i++)
            cout << "*" << endl;

        for ( i = 0; i < b; i++)
            cout << "*" << endl;

        for ( i = 0; i < c; i++)
            cout << "*" << endl;
    }

我知道输出与以下内容相同:

for ( i = 0; i < a + b + c; i++ ){
cout << "*" << endl;
}

所以对于 2 3 1 我得到:

*

*

*

*

*

*

我想要的是:

     *

*    * 

*    *    *   //Horizontal distance between 2 shapes don't matter.

并且必须完全按照该顺序完成。每列的打印也必须使用单独的功能完成。

第一个循环:

*

*

第二个循环:

    *

*   *

*   *

最后一个循环:

    *

*   *

*   *   *

*编辑: *显然还有其他解决方案可以做到这一点,根本不使用任何游标操作。我的老师建议我应该首先将字符存储在一个字符指针中,然后逐行打印该字符指针内存。效果很好.

4

2 回答 2

1

这是一个可以做到的诅咒程序

#include <iostream>
#include <curses.h>

using namespace std;

int main(int argc, char** argv)
{
  int a,b,c,i;
  cin >> a >> b >> c;

  initscr(); // initialise curses
  int rows, cols;
  getmaxyx(stdscr, rows, cols);  // get screen size


  for (i=0; i<a; i++) {
    mvprintw(rows - 1 - i, 0, "*"); // plot at bottom column 0
  }

  for (i=0; i<b; i++) {
    mvprintw(rows - 1 - i, 1, "*"); // plot at bottom column 1
  }

  for (i=0; i<c; i++) {
    mvprintw(rows - 1 - i, 2, "*"); // plot at bottom column 2
  }

  refresh();  // update screen
  getch(); // exit when key is pressed
  endwin(); // exit curses
  return 0;
}
于 2013-05-13T12:20:45.970 回答
0

你不能以你想要的方式做到这一点。您需要一次打印一条水平线,因为您无法垂直输出到控制台。

所以首先你需要找出你总共需要多少行,totalLines,这是最大值abc。然后你应该遍历每一行。

在行迭代中,您需要*在正确的位置打印出正确数量的 s。是否需要画点的条件aa >= totalLines - lineline当前行在哪里,第一行从0开始)。b与and类似c,因此您需要 3 个if具有这些条件的语句,每个语句都打印出空格或*.

于 2013-05-11T11:39:11.470 回答