Perl(或C printf)返回一个标签,可能吗?

时间:2012-12-18 16:02:53

标签: c perl tabs printf

我们都知道如何使用\ t

进一步打印一个字符串
printf ("Hello\tthere!\n");

输出:

Hello    there!

如何向后打印一个标签?我知道我们可以使用\ r \ n从行的开头开始,但是有一种情况,当缩进比这更复杂时,我正在寻找类似\ bt(如果它存在)的东西,这样我就可以写:< / p>

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

进入输出:

Hello    there!
             How
         are you?

修改

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

修改2

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

3 个答案:

答案 0 :(得分:3)

使用 printf 可以控制明确显示的标签数量。要返回选项卡,您只需使用较少的选项卡。从您提供的示例看起来,您希望标签级别能够记住,并且如何缩进比打印时更加缩进。它会出现在与那里相同的制表位!是你吗?

假设:

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

您期待看到:

Hello   there! 
    How
are you?

然后只是不要在之前添加标签吗?,你会得到你想要的。要获得更少的标签,只需在 printf 中添加更少的 \ t 符号即可。 printf 之前没有任何内存显示标签。

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

答案 1 :(得分:2)

不,没有特殊的角色可以做你想做的事。甚至\b的行为也取决于平台。

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

但为什么你需要这个呢?为什么不直接使用:

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

答案 2 :(得分: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);

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