2013-05-11 53 views
0

我之前問過這樣的問題,但它有點誤導,因爲我沒有包括打印順序。我認爲再問一次會更貼切。使用光標操作打印垂直直方圖C++ [ncurses] [已解決無W/O ncurses]

#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. 

它必須能準確地完成在order.Also每列的印刷必須是完成一個獨立的功能。

第一個循環:

* 

* 

第二環:

* 

* * 

* * 

最後循環:

* 

* * 

* * * 

* 編輯: * Appereantly有一個其他的解決辦法做到不任何使用光標操作。我的老師建議我應該先將字符存儲在char指針中,然後逐行打印該char指針的內存。其中工作得很好。

+0

沒有「光標」在標準C++中,只有一個不透明的輸出流。你必須重新思考一切。 – 2013-05-11 11:38:01

+0

這就是爲什麼我需要通過使用ncurses或做同樣的事情來做到這一點。請幫忙嗎? – SpiderRico 2013-05-11 13:44:25

+0

是的,你可以用ncurses來完成。通過教程,你應該能夠立即做到這一點。 – 2013-05-12 15:41:28

回答

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

你不能這樣做你想要的。您需要一次打印一條水平線,因爲您無法垂直輸出到控制檯。

首先,您需要找出總共需要多少條線路,totalLines,這是最大值a,bc。然後你應該遍歷每一行。

在行迭代中,您需要在正確的位置打印正確數量的*。是否需要爲a繪製點的條件是a >= totalLines - line(其中line是當前行,從第一行的0開始)。同樣,對於bc,所以您需要3個if語句,這些語句每個都打印出空格或*

+0

甚至沒有使用ncurses或類似的東西嗎?一行一行地做它根本不會幫助我。我抽象出我的真實程序,它包含一些複雜的繪製算法,不僅包含「*」,而且還包含多個形狀,所以我很害怕我必須處理光標操作或更改整個程序本身:< – SpiderRico 2013-05-11 12:45:47

+0

@ user2362377嗯,是的,你可以用ncurses來完成。你的問題似乎意味着你想用標準的I/O庫來做到這一點。 – 2013-05-11 12:47:19

+0

Rite,ty.I編輯頭文件。如果您知道如何使用ncurses執行操作,請不要猶豫,以便發佈答案:> – SpiderRico 2013-05-11 13:02:44