【问题标题】:How does \r,\n,\b works in this program [duplicate]\r,\n,\b 在这个程序中如何工作[重复]
【发布时间】:2013-10-14 10:20:20
【问题描述】:

谁能告诉我如何获得以下代码的 output:hai

   int main()
   {
   printf("\nab");
   printf("\bsi");
   printf("\rha");
   return 0;
   }

【问题讨论】:

    标签: c gcc escaping


    【解决方案1】:

    他们按照他们应该的方式工作!!

    \n => 换行,垂直转到同一列中的下一个位置
    \b => BackSpace,向后转到一个位置
    \r => 回车,与 Home 相同键入键盘

    详细解释:

    \r:

    将光标移动到同一行的 Home 位置。

    \b:

    如果不在 Home 位置,将光标在同一行上向后移动一位。

    \n:

    编辑(interjay 建议):根据 C 标准,无论平台如何,都应将光标移动到下一行的 Home 位置。

    第一个printf之后的输出:

    ab

    第二个printf之后的输出:

    asi

    第三个printf之后的输出:

    hai

    【讨论】:

    • \n 转到下一行的第一列。
    • @interjay :现在阅读我的答案
    • @interjay 我认为不在 Windows 上,这就是为什么你必须说 \r\n
    • @A4L 和 0xF1:我知道它被翻译了。这就是为什么你所说的(关于\n 留在同一列中)是错误的,除非你正在写入二进制文件(这里不是这种情况)。您在这里混淆了两个不同的东西(C 中控制字符的含义和 Windows 中控制字符的含义)。这里只有 C 中的含义很重要。
    • @interjay :我弄错了,\n 在 Unix 和 Windows 上的工作方式相同,尽管它在 Unix 中没有被翻译成任何东西。因此\n 应该将光标带到下一行的开头。我也更新了我的答案。谢谢!!
    【解决方案2】:

    这很明显。

    程序以打印 \nab 开始。这里,\n 的意思是,转到下一行。因此,光标将转到下一行并显示其余字符,如:

    ab

    然后,程序打印 \bsi。在这里,\b 的意思是,返回一个字符并打印其余字符。所以输出变成:

    阿西

    现在,最后,程序打印 \rha。这里,\r 的意思是,回到行首并打印剩余的字符。所以,输出变成:

    【讨论】:

      【解决方案3】:

      对我来说不是!

      在我的 mac 上,c11 (-std=c11) 控制台上的 输出 是:

      (emtpy line)
      asi
      ha
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多