参考此处给出的答案,您必须从以下代码中得到什么输出:
#include<stdio.h>
int main()
{
int a=65;
printf("%d\n",printf("%d\
\n",a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出:
65
4
Run Code Online (Sandbox Code Playgroud)
但对我来说,它似乎应该给出这个:
65
3
Run Code Online (Sandbox Code Playgroud)
为什么是输出65 4?
您正在打印 4 个字符<tab>, \n, 6, 和5,因此您得到的结果完全合理。
请注意,\在此printf("%d\n",printf("%d\行的末尾,将包含下一行的所有缩进到格式化字符串中。<tab>当您运行文件时,此缩进最初是一个字符。
有些人报告输出的原因 65 7是 StackOverflow 将粘贴代码中的所有选项卡更改为 4 个空格,因此他们从您的问题中复制的代码与您在机器上运行的代码不同。
请参阅此演示,其中显示<tab>了输出中的存在(在线版本):
#include<stdio.h>
int main()
{
int a=65;
printf("%d\n",printf("%d\
<--tab here\n",a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)#include<stdio.h> int main() { int a=65; printf("%d\n",printf("%d\ <--tab here\n",a)); return 0; }
如果你删除奇怪的、完全不必要的、明显容易出错的行继续,它会很好地打印预期的输出:
#include<stdio.h>
int main()
{
int a=65;
printf("%d\n",printf("%d\n",a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)65 <--tab here 15
因为\它将下一行的缩进字符(制表符、空格)作为字符串的一部分。要连接不同行的字符串,只需将每个部分用双引号括起来:
#include<stdio.h>
int main()
{
int a=65;
printf("%d\n",printf("%d"
"\n",a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作为一般说明 - \for 行延续仅在多行宏定义或我不知道的一些特殊情况下很有用。