将光标定位在屏幕上

时间:2013-04-14 02:29:23

标签: c++

已经好几个小时了,无法弄清楚如何以我想要的方式实现这一目标。

我需要它将文本集中在控制台输出中这样......

*******************************************
            ABC Industries
                Report
*******************************************
而不是像这样出来..

    **********************************
ABC Industries
Report
    **********************************

这是我到目前为止所得到的任何帮助都将很高兴。

#include <string>
#include <iomanip>
#include <iostream>
#include <windows.h>
#include <cctype>
using namespace std;

class Heading
{
private:
    string companyName;
    string reportName;
public:
    Heading();
    void placeCursor(HANDLE, int, int);
    void printStars(int);
    void getData(HANDLE, Heading&);
    void displayReport(HANDLE, Heading);
};

int main()
{
    Heading display;
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    display.getData(screen, display);
    display.displayReport(screen, display);
    cin.get();
    return 0;
}

Heading::Heading()
{
    companyName = "ABC Industries";
    reportName = "Report";
}

void Heading::placeCursor(HANDLE screen, int row, int col)
{
    COORD position;
    position.Y = row;
    position.X = col;
    SetConsoleCursorPosition(screen, position);
}

void Heading::printStars(int n)
{
    for(int star=1; star<=n; star++)
        cout << '*';
    cout <<endl;
}

void Heading:: getData(HANDLE screen, Heading &input)
{
    string str;
    placeCursor(screen, 2, 5);
    cout <<"Enter company name";
    placeCursor(screen, 2, 26);
    getline(cin, str);

    if(str!="")
        input.companyName = str;
    placeCursor(screen, 4, 5);
    cout<<"enter report name";
    placeCursor(screen, 4, 26);
    getline(cin, str);
    if(str!="")
        input.reportName = str;
}

void Heading::displayReport(HANDLE screen, Heading input)
{
    int l;
    placeCursor(screen, 8, 5);
    printStars(69);
    string str=input.companyName;
    l= str.length();
    l=39-l/2;
    placeCursor(screen, 9, 1);
    cout << str;
    str=input.reportName;
    l=str.length();
    l=39-l/2;
    placeCursor(screen, 10, 1);
    cout << str;
    placeCursor(screen, 11, 5);
    printStars(69);
}

1 个答案:

答案 0 :(得分:0)

你要踢自己......

注意在Heading :: displayReport中,您计算​​公司名称的长度,然后将其除以2并从39减去。然后继续将光标定位到9,1(九,一)。

你打算做的是将光标位置设置为9,l(9,el)。

然后,您也要重复对reportName字段的疏忽。 ;-p

所以,做出这两个改变

//    placeCursor(screen, 9, 1);
    placeCursor(screen, 9, l);

//    placeCursor(screen, 10, 1);
    placeCursor(screen, 10, l);