【问题标题】:How to make Windows console cursor jump to next line at the end of the line如何使 Windows 控制台光标跳到行尾的下一行
【发布时间】:2023-03-08 02:17:02
【问题描述】:

我正在使用的终端模拟器出现问题,我已设法将问题缩小到 Windows 控制台中奇怪的光标行为。 在常规 cmd 中,当您将字符准确地写入行尾时,光标会跳转到下一行。 (见下图)

当我尝试在我编写的程序中使用 printf 实现相同目的时,光标停留在同一个字符上。 (见下图)

我已经设法通过打印 hacky " \b" 来实现“类似 cmd”的结果,但我正在尝试找到一种更好的方法来做到这一点(即,下一行的第一个字符可能是有意义的,并且我不想抹去。读那个字符当然不优雅)。

我正在寻找一种方法来自动实现这一点。控制台的一些配置可能吗? 这里有人知道怎么做吗?

代码示例(假设控制台的默认大小为 80):

int main() {
    printf("12345678901234567890123456789012345678901234567890123456789012345678901234567890");
    fflush(stdout);
    getc();
    return 0;
} 

如果你运行这段代码,在打印之后,光标会停留在行尾的字符 0 上。 我的问题是如何使光标出现在下一行的开头,而不更改硬编码字符串。

【问题讨论】:

  • 你没有加入图片
  • 两张图片都在帖子里面
  • 您是否为此创建了控制台缓冲区?还是与 cmd 分开的程序?
  • Visual Studio 中一个简单的控制台应用程序
  • 请不要包含任何代码,问题根本与编程无关(只是关于 Windows 控制台应用程序的工作原理)请编辑问题以反映您在做什么,预期响应和实际收到的响应。详情请见How to create a Minimal, Complete, and Verifiable example

标签: c windows console


【解决方案1】:

在 Windows 中,行尾表示为“\r\n”而不是(如在 unix 中)“\n”。 \r 是回车符,\n 是换行符。因此,为换行符发出 "\r\n" 应该可以解决您的问题。

https://en.wikipedia.org/wiki/Newline

【讨论】:

  • 数据当然不是静态的,它来自另一个应用程序。我只希望光标始终位于当前字符之后。要输出换行符,我必须计算字符并将其写在行尾,这比在每个 printf 后添加“\b”还要糟糕。
  • 如果您将FILE * 指针标记为文本,许多Windows 库会自动在\n 之前插入\r,以确保在UNIX 环境中的可移植性。无论如何,您的建议毫无用处,因为问题与标记的 C 编程无关。我们根本没有看到任何代码。
【解决方案2】:

我找到了解决方案: https://docs.microsoft.com/en-us/windows/console/setconsolemode

标志 DISABLE_NEWLINE_AUTO_RETURN 似乎在 VS 中默认启用。

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多