C \r\n\b如何在此程序中工作

C \r\n\b如何在此程序中工作,c,gcc,escaping,C,Gcc,Escaping,有人能告诉我如何获得以下代码的输出:hai int main() { printf("\nab"); printf("\bsi"); printf("\rha"); return 0; } 他们本该工作的 \n=>换行,垂直转到同一列中的下一个位置 \b=>退格,向后移动一个位置 \r=>回车键,与键盘中的Home键相同 详细解释: \r: 将光标移动到同一行的起始位置 \b: 如果光标不在起始位置,则在同一行上将光标向后移动一个位置 \n: 编辑(i

有人能告诉我如何获得以下代码的输出:hai

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

他们本该工作的

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

详细解释:

\r

将光标移动到同一行的起始位置

\b

如果光标不在起始位置,则在同一行上将光标向后移动一个位置

\n

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

第一次打印后的输出
printf

ab

第二次打印后的输出
printf

asi

第三次打印后的输出
printf

这很明显

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

ab

然后,程序打印\bsi。这里,\b意味着,返回一个字符并打印其余字符。因此,结果是:

asi

现在,程序最后打印\rha。此处,\r表示返回到行首并打印其余字符。因此,输出变为:


对我来说不是

在带有
c11
(-std=c11)的mac上,控制台上的输出为:

(emtpy line)
asi
ha

\n
转到下一行的第一列。@interjay:现在读我的answer@interjay我认为不是在windows上,这就是为什么你必须说
\r\n
@A4L和0xF1:我知道它会被翻译。这就是为什么您所说的(关于
\n
保持在同一列中)是错误的,除非您正在写入二进制文件(这里不是这种情况)。您在这里混淆了两个不同的东西(C中控制字符的含义和Windows中控制字符的含义)。只有C语言的含义在这里才重要。@interjay:我弄错了,
\n
在Unix和Windows上也同样有效,尽管它在Unix中没有翻译成任何东西。所以
\n
应该将光标移到下一行的开头。我也更新了我的答案。谢谢