C \r\n\b如何在此程序中工作
有人能告诉我如何获得以下代码的输出:haiC \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
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
应该将光标移到下一行的开头。我也更新了我的答案。谢谢