【问题标题】:Can someone explain how \n,\b,\r behave in C? [duplicate]有人可以解释 \n,\b,\r 在 C 中的行为吗? [复制]
【发布时间】:2017-04-04 14:27:34
【问题描述】:

我有下面的例子

 #include <stdio.h>
    #include<conio.h>

    void main()
    {
        printf("\nab");
        printf("\bsi");
        printf("\rha");
        _getch();
    }

首先,我不明白 printf 函数是如何工作的。我一直在努力寻找可以解释这一点的教程,但它们太基础了。

理解这一点的方式是有一个光标可以读取输入中的每个字符。例如,如果我们只有以下行:

printf("\bsi")

凭直觉,我认为它只是输出字符串 si,因为 si 之前没有先前的字符,但输出是 i。我还想补充一点,\b 考虑了另一个奇怪的 printf 的输入。

我还认为所有这些 printf 都相当于一个 printf。比如:

printf("\nab\bsi\rha");

这让我觉得酒吧后面发生了一些我无法真正解释或说出的事情。我认为这与输入上的某个指针有关,或者 printf 将输入存储在缓冲区中并以某种方式读取它。

有人能详细解释一下 printf 的工作原理吗?

....

这个问题有点不同,因为我知道这是同一个练习,但我对此有不同的看法并以不同的方式处理它。

【问题讨论】:

  • 你看到了什么? ab\bsi 之前输出——它们在同一行,因为您没有在第一个字符串之后输出换行符。我想你应该看到hai。是的,这三个等于一个。在你用 C 程序编程很长时间之前,直觉是一个非常糟糕的指标。
  • 也许this 会有所帮助?
  • @Avi: 那么\a 是什么?
  • @JonathanLeffler... 是的,我正在详细学习如何用 C 语言编程。很多新手绕过了很多我试图理解的东西。没有人回答我的任何问题 例如:如果没有要删除的先前字符,为什么 printf("\bsi") 返回 i 而不是 si。
  • 最终,会发生什么取决于输出的显示方式——标准并没有说明,这是有充分理由的。然而,在大多数终端上,\n 输出一个换行符,将光标移动到新行的开头。写了ab这两个字母;然后退格 \b 将光标向后移动一位,以便 s 覆盖 bi 跟随。回车\r 将光标移回行首;字母h 覆盖aa 覆盖s,留下hai 显示。你的“如果会发生什么”的问题不清楚——这取决于终端等。

标签: c


【解决方案1】:

转义序列

转义序列用于表示字符串文字和字符文字中的某些特殊字符。 上述转义序列可用(额外的转义序列可以提供实现定义的语义):

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2019-12-06
    • 2020-06-03
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多