C - 删除已打印的换行符

时间:2014-07-26 03:31:01

标签: c linux newline backspace

如何删除已经打印并加载到缓冲区的换行符?据我所知,\b字符仅将光标移回当前行,并且不适用于换行符。我怎么能绕过这个?

如果编辑问题以指示如何发出这种不合需要的换行符将会有所帮助。 - Mahonri Moriancumer

实际上并非不受欢迎。我想在输出另一个状态之前预览具有一个缓冲区状态的用户。但是,我不想连续显示多个缓冲状态。例如,假设我要显示两个矩阵,

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

我希望第二个矩阵替换第一个矩阵。为此,我需要删除第一个矩阵的输出数字。

也许您可能会考虑再次编辑问题并指出操作系统和/或终端类型?

目前运行Linux(Ubuntu)x64,使用xterm(确切地说是ROXTerm)。

2 个答案:

答案 0 :(得分:4)

有两个广泛支持的字符用于编写先前编写过的内容:\b,退格,正如您所提到的那样,以及\r,回车,以便将“写头”带回来到了行的开头。

如果你想回到上一行,你不会完全运气不好,但你必须求助于那些虽然仍然受到广泛支持的东西,特别是终端模拟器,可能没有得到如此广泛的支持(例如,如果你将它传播到lp,它可能不会起作用)。我指的是ANSI转义序列。有很多,但值得注意的是^[[A,它将“写头”向上移动一行。 (^[这里是ESC ASCII字符,十六进制值0x1B)。在C:

中使用它
printf("\x1B[A");  /* move up one line */

答案 1 :(得分:1)

此问题的解决方案取决于您使用的输出设备类型和系统。听起来你正在使用控制台。如果您使用的是Unix变体,则可以使用curses库来控制屏幕并将文本放在您想要的位置。

您面临的问题是\ n是C构造。在某些时候,系统会将\ n转换为控制台显示的序列。