C语言中printf()函数的返回值

31

printf()函数将返回打印的字符数。但在下面的代码中为什么会打印5呢?

int a=1000;
printf("%d",printf("\n%d",a));

它打印一次"1000"和一个空格,所以总共有5个字符。
它应该输出"1000 2"。但它输出的是"1000 5"。

7
您说应该打印的空格在已发布代码中的哪里?在我的系统中,它按预期打印为“10005”,没有空格。 - Luis Colorado
3
“1000”不是一个字符,而是四个字符。 - user207421
13个回答

59

输出的字符数是5个。 1000 是四个字符。 \n 是一个字符。

printf 不像输入函数scanf系列那样返回"items"(元素)的数量,而是返回实际输出的字符数。


12

内部调用先发生,打印5个字符(\n, 1, 0, 0, 0),并返回5

然后发生外部调用,并打印内部调用返回的5


5
假设表达式:
int a=10;
printf("a=%d",printf("b=%d",a));

输出

b=10 a=4;

b是因为给b赋的值

b=10;

并且。
b,=,1,0   

将四个计算为一个,并分配给a,即:

a=4;

3

printf()函数返回实际字符数量,而在这里我们有4个("1000")字符和1个("\n")字符,因此它将输出1000,然后是5,这是内部printf函数的字符计数,看起来像10005


3
你应该明确注意到,1000是4个字母,而且你有一个\n,它本身是一个字符。

3

首先我们来查看内部printf的输出:

/n, 1, 0, 0, 0

现在你需要考虑两件事情:
1) You have to take escape sequences like '\n','\t' etc into account.
2) You have to take 1 escape sequence as 1 character (not 2)

外部的printf返回内部printf的实际字符计数,即5个字符。因此,外部的printf返回5。


2
数字1000由四个数字组成,因此需要四个字符才能打印出来。加上换行符总共需要五个字符。

2
printf("%d",printf("\n%d",a)); 中,printf("\n%d",a) 会打印一个换行符 '\n' 和整数值 1000,总共占用 5 个字符。首先会先调用内部的第一个 printf 打印换行和 1000,然后外部的 printf 会打印返回值 5。请注意保留 HTML 标签,但不需要写解释。

1

Printf 函数返回成功打印的字符数。


1

printf() 返回在控制台上打印的字符总数,如果你传入 1000,则第一个内部 printf() 函数将工作并打印 1000,这里的字符数为 4。其中一个是 \n。

因此,总字符数变为 5,这就是为什么它会打印出 1000 5 的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接