在屏幕上定位光标

Positioning the Cursor on the Screen

本文关键字:光标 定位 屏幕      更新时间:2023-10-16

已经做了好几个小时了,还是不知道怎么把它变成我想要的样子。

我需要它在控制台输出中居中,像这样…

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

你会后悔的

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

您要做的是将光标位置设置为9,l (9, el)。

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

那么,让这两个改变

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

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