【问题标题】:Why the '\b' at the end of the string doesn't have effect? [duplicate]为什么字符串末尾的 '\b' 不起作用? [复制]
【发布时间】:2016-11-30 03:05:27
【问题描述】:

下面是代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("WORD\b\b WORD\b\b");
    return 0;
}

生成此输出:

WO WORD

问题是为什么最后一个\b 在第二个单词位于字符串末尾时对它们没有影响?

【问题讨论】:

  • 您使用的是什么操作系统和终端?
  • 我猜这是因为 '\b' 只是将光标向后移动了一步,并没有删除任何字符。 'R'和'D'从第一个'WORD'中消失的原因是因为你用空格和'W'覆盖它们。
  • "WORD\b\b WORD\b\b " 会发生什么?我怀疑您的终端将光标移回,但没有删除字符。
  • @gurka 评论似乎是正确的答案!谢谢:)
  • 我认为这个问题是不恰当的。给定的程序确实具有将字符打印到标准输出的效果,但系统的其他部分(例如在屏幕上显示标准输出的终端)如何解释这些字符不在 C 或 C++ 的范围内。

标签: c backspace


【解决方案1】:

它确实有影响,影响是将光标向后移动,但'\b' 不会删除任何字符,除非你覆盖它们。

如果您想在之后打印其他内容,将从当前光标位置继续打印。

注意:此行为取决于您用于显示文本的终端。

【讨论】:

    【解决方案2】:

    这主要取决于您使用的外壳/终端以及它如何解释退格字符。

    您上面描述的行为发生在 Windows 的命令提示符中。该终端显然将光标在退格上向后移动一个空格,但不会删除该字符。退格后打印的任何字符都会覆盖以前写入的字符。

    例如,如果您要这样做:

    printf("WORD\b\b WORD\b\bx");
    

    你的输出是这样的:

    WO WOxD
    

    相比之下,在 Ubuntu 机器上使用 bash 运行代码会产生以下输出:

    WO WO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2012-04-04
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多