-2

我们都知道如何用 \t 进一步打印一个字符串

printf ("Hello\tthere!\n");

输出:

Hello    there!

向后打印一个标签怎么样?我知道我们可以使用 \r 从行首重新开始,但是在缩进比这更复杂的情况下,我正在寻找类似 \bt (如果它存在)这样我可以写的东西:

printf ("Hello\tthere! \n\tHow\n\btare you?\n");

进入输出:

Hello    there!
             How
         are you?

编辑

我对这里回复的数量和速度感到惊讶,有时甚至对一些评论的无用性感到惊讶,但只有少数。我想要实现的当然比这更复杂,它正确地格式化了一个 XML 文件以便于阅读。我想确定没有更简单的方法,回复确认没有谢谢。

编辑 2

对不起,伙计们,你对这个问题投反对票是对的,首先是因为我没有指定我正在写入文本文件,其次是因为我假设标签可以被文件处理程序“记住”。很抱歉浪费您的时间。

4

3 回答 3

3

使用printf您可以显式控制标签的数量。要返回标签,您只需使用更少的标签。从您提供的示例中,您似乎希望标签级别被记住,并且缩进的程度比打印时的实际程度要远。它会出现在与那里相同的制表位上!你呢

假设:

printf ("Hello\tthere! \n\tHow\n\btare you?\n");

您希望看到:

你好呀!
    如何
你是?

那么只是不要在你之前添加标签吗?你会得到你想要的。要获得更少的选项卡,只需在printf中添加更少的\t符号。 printf对之前发生的制表符没有任何记忆。

printf ("Hello\tthere! \n\tHow\nare you?\n");
于 2012-12-18T16:18:31.720 回答
2

不,没有特殊字符可以做你想做的事。甚至 的行为\b也依赖于平台。

\bt很简单,退格字符后跟字母t。因此支持该语法,但没有特殊行为。

但是为什么你需要在这里?为什么不直接使用:

printf("Hello\tthere!\r\n\tHow\r\nare you?\n");
于 2012-12-18T16:09:05.737 回答
1

没有办法“返回标签”,但还有其他选项:

正如你所指出的,\t给你一个标签。

\b可以给你一个退格,所以你可以用它“备份”。

还有一些不太常用的:
\f是换页/新页面(从打印机中弹出页面)
\v是垂直选项卡(在同一列上向下移动一行)

因此,使用其他选项,您可以模拟您想要的。

printf("Hello, this is\n\t\tjust a test.\n");
printf("Hello, this is\v\b\bjust a test.\n");

最终看起来像:

Hello, this is
        just a test.
Hello, this is
    just a test.

然后,您可以使用以下内容简化代码:

#define BACKTAB "\v\b\b"

printf("Hello, this is%sjust a test.\n", BACKTAB);

我认为这是你能做的最好的

于 2012-12-18T16:12:28.750 回答