0

一直在这几个小时,无法弄清楚如何以我想要的方式得到这个。

我需要它使文本在控制台输出中居中,如下所示...

*******************************************
            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);
}
4

1 回答 1

0

你会踢自己..

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

您的意思是将光标位置设置为 9,l (nine, el)。

然后,您也重复对 reportName 字段的监督。;-p

所以,做这两个改变

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

//    placeCursor(screen, 10, 1);
    placeCursor(screen, 10, l);
于 2013-04-14T06:15:36.323 回答