如何在C或C ++中将光标设置在控制台上的所需位置?
我记得一个名为gotoxy(x,y)
的函数,但我认为它已被弃用了。还有其他选择吗?
答案 0 :(得分:4)
C和C ++都没有任何屏幕或控制台的概念;它们只能看到没有固有显示特性的字节流。有许多第三方API,例如ncurses,可以帮助您实现这一目标。
如果您想要一个快速解决方案和,您正在使用的终端了解ANSI escape sequences,那么您可以执行以下操作:
printf("\033[%d;%dH", row, col);
将光标移动到特定的行和列(左上角为{1,1})。不过你最好使用ncurses(或者你的平台的等价物)。
答案 1 :(得分:3)
MSDN库的同一部分还有许多其他功能。其中一些也可能有用。
答案 2 :(得分:1)
如果您在谈论ncurses库,您所使用的功能是move (row, column)
。
答案 3 :(得分:1)
我使用一种非常简单的方法。你不需要知道HANDLE是什么,除非你真的潜入控制台应用程序,COORD对象在windows.h标准库中并且有两个成员数据整数X和Y. 0,0是左上角角落和Y增加到屏幕下方。您可以使用此命令并继续使用std :: cout<<打印你需要的任何东西。
#include <windows.h>
int main(void){
//initialize objects for cursor manipulation
HANDLE hStdout;
COORD destCoord;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
//position cursor at start of window
destCoord.X = 0;
destCoord.Y = 0;
SetConsoleCursorPosition(hStdout, destCoord);
}
答案 4 :(得分:1)
您可以使用它来将光标设置为屏幕上的特定坐标,然后只需使用cout <<或printf语句即可在控制台上打印任何内容:
var body: some View {
ScrollView {
ForEach(0..<100, id: \.self) { number in
Text("\(number)")
}
}
}
答案 5 :(得分:0)
这是在stackoverflow上...
`#include <stdio.h>
// ESC-H, ESC-J (I remember using this sequence on VTs)
#define clear() printf("\033[H\033[J")
//ESC-BRACK-column;row (same here, used on terminals on an early intranet)
#define gotoxy(x,y) printf("\033[%d;%dH", (y), (x))
int main(void)
{
clear();
gotoxy(23, 12);
printf("x");
gotoxy(1, 24);
return 0;
}`
答案 6 :(得分:-1)
我想出了这个来设置光标。
#include <iostream>
void setPos(std::ostream& _os, const std::streamsize& _x, const std::streamsize& _y)
{
char tmp = _os.fill();
if(_y>0) {
_os.fill('\n');
_os.width(_y);
_os << '\n';
}
if(_x>0) {
_os.fill(' ');
_os.width(_x);
_os << ' ';
}
_os.flush();
_os.fill(tmp);
}
int main(int argc, char **argv)
{
setPos(std::cout, 5, 5);
std::cout << "foo" << std::endl;
return 0;
}
要做更多事情,您需要对分辨率或类似ncurses的库进行假设。