任何人都可以解释以下声明的输出吗?

时间:2016-09-23 16:35:16

标签: c printf

我无法理解用C编写的以下陈述:

printf("%d", printf("%d", printf("%s", "I love c programming")));

在C中写这样的语句是否有效?

当我运行它时,我得到输出:

I love c programming202

有人能解释一下这句话的结果吗?

3 个答案:

答案 0 :(得分:4)

printf返回int,表示错误或包含写入的字符数。因此,因为%dint的格式字符串,所以此嵌套完全有效。

您的输出为"I love c programming202"。所以让我们打破这个:

  1. 最里面的printf打印"I love c programming"。这是20个字符,printf返回。
  2. 第二个最里面的printf打印20,因为这是前一个printf的返回值。
  3. 外部printf打印2,因为20有2个字符。

答案 1 :(得分:1)

是。 printf是一个函数,它返回一个整数值(打印的字符数,包括最后的\ n)

答案 2 :(得分:1)

printf返回值:成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的空字节)。

printf("%d",printf("%d",printf("%s","I love c programming")));

<=>

int ret;                                                                                       
// output "I love c programming" => ret = 20                                                    
ret = printf("%s","I love c programming");·                                                    
// ret = 20 => output "20" => ret = 2                                                          
ret = printf("%d", ret);                                                                       
print("%d", ret); // ret = 2 => output "2"                                                         

// => I love c programming202