【发布时间】:2013-10-14 10:20:20
【问题描述】:
谁能告诉我如何获得以下代码的 output:hai?
int main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
return 0;
}
【问题讨论】:
谁能告诉我如何获得以下代码的 output:hai?
int main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
return 0;
}
【问题讨论】:
他们按照他们应该的方式工作!!
\n => 换行,垂直转到同一列中的下一个位置\b => BackSpace,向后转到一个位置\r => 回车,与 Home 相同键入键盘
详细解释:
\r:
将光标移动到同一行的 Home 位置。
\b:
如果不在 Home 位置,将光标在同一行上向后移动一位。
\n:
编辑(interjay 建议):根据 C 标准,无论平台如何,都应将光标移动到下一行的 Home 位置。
第一个printf之后的输出:
ab
第二个printf之后的输出:
asi
第三个printf之后的输出:
hai
【讨论】:
\n 转到下一行的第一列。
\r\n
\n 留在同一列中)是错误的,除非你正在写入二进制文件(这里不是这种情况)。您在这里混淆了两个不同的东西(C 中控制字符的含义和 Windows 中控制字符的含义)。这里只有 C 中的含义很重要。
\n 在 Unix 和 Windows 上的工作方式相同,尽管它在 Unix 中没有被翻译成任何东西。因此\n 应该将光标带到下一行的开头。我也更新了我的答案。谢谢!!
这很明显。
程序以打印 \nab 开始。这里,\n 的意思是,转到下一行。因此,光标将转到下一行并显示其余字符,如:
ab
然后,程序打印 \bsi。在这里,\b 的意思是,返回一个字符并打印其余字符。所以输出变成:
阿西
现在,最后,程序打印 \rha。这里,\r 的意思是,回到行首并打印剩余的字符。所以,输出变成:
喂
【讨论】:
对我来说不是!
在我的 mac 上,c11 (-std=c11) 控制台上的 输出 是:
(emtpy line)
asi
ha
【讨论】: