gpt4 book ai didi

c - 使用 Gotoxy() 函数将 X 坐标居中

转载 作者:行者123 更新时间:2023-11-30 16:27:06 28 4
gpt4 key购买 nike

我想使用 printf 写一些东西,同时将 x 坐标和 y=0 居中。

如何使 x 坐标居中?例如,有人可能会全屏打开编译器窗口,而其他人可能不会?我想要中间的文字。现在 x 被分配了一个随机值 (50)

#include <stdio.h>
#include <conio.h>

int main()
{
gotoxy(50,0);

printf("Test");

return 0;
}

最佳答案

I'm just using an online compiler right now. onlinegdb.com Was thinking if there was a way to center the x so that it's the same in every compiler.

什么是可能的或不可能的不是由您使用的编译器决定的,而是由平台和您准备编写的代码量决定的。

标准 C 不知道控制台、窗口和其他依赖于平台的东西。如果您想了解有关控制台属性的信息,则必须询问控制台/操作系统。还有像 ncurses 这样的库对于POSIX,允许不同的POSIX系统可以运行的终端进行统一处理。

ncurses 的实现-可用于 DOS、OS/2、Win32、X11 和 SDL 的库是 PDCurses 。它可用于编写与平台无关的代码。

但是既然您提到您的平台是 Windows,那么这里有一个仅使用 WinAPI 的解决方案:

#include <stddef.h>
#include <stdio.h>
#include <string.h>

#include <windows.h>

COORD get_console_dimensions(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
COORD dimensions = { csbi.srWindow.Right - csbi.srWindow.Left,
csbi.srWindow.Bottom - csbi.srWindow.Top };
return dimensions;
}

COORD get_console_cursor_pos(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.dwCursorPosition;
}

void gotoxy(short x, short y)
{
COORD pos = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void puts_centered(char const *str)
{
size_t length = strlen(str);
short x = (short)(get_console_dimensions().X - length) / 2;
gotoxy(x, get_console_cursor_pos().Y);
puts(str);
}

int main(void)
{
puts_centered("Hello, World!");
}

使用ncurses可以实现相同的效果(也适用于 PDCurses ,包括 <curses.h> 而不是 <ncurses.h> ):

#include <string.h>

#include <ncurses.h>

int main(void)
{
initscr();
int max_x = getmaxx(stdscr);
int y, x;
getyx(stdscr, y, x);
char const *str = "Hello, World!\n";
mvaddstr(y, (max_x - strlen(str)) / 2, str);
refresh();
// endwin(); // *)
}

直播:https://onlinegdb.com/HkIpXBUim

请注意 OnlineGDB 支持 ncurses它的“终端”坏了。 getyx()不会告诉其控制台的真实宽度。

*) 文档显示您应该调用 endwin()在退出程序之前。如果您使用 OnlineGDB 这样做,您将不会从 OnlineGDB 获得任何可见的输出。仅当您单击“将输出复制到剪贴板”按钮并查看复制的文本时,您才会看到 ncurses 生成的 ANSI 转义序列。 .

关于c - 使用 Gotoxy() 函数将 X 坐标居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52877110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com