C 有人能解释一下下面语句的输出吗?

C 有人能解释一下下面语句的输出吗?,c,printf,C,Printf,我无法理解以下用C写的陈述: printf("%d", printf("%d", printf("%s", "I love c programming"))); 用C写这样的语句有效吗 当我运行它时,我会得到输出: I love c programming202 有人能解释一下这句话的输出吗?是的printf是一个函数,它返回一个整数值(打印的字符数,包括结尾的\n)printf返回一个指示错误或包含写入字符数的int。因此,因为%d是int的格式字符串,所以这个嵌套是完全有效的 您的输出是

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

printf("%d", printf("%d", printf("%s", "I love c programming")));
用C写这样的语句有效吗

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

I love c programming202

有人能解释一下这句话的输出吗?

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

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

您的输出是
“我爱c编程202”
。让我们把它分解一下:

  • 最里面的
    printf
    打印
    “我爱c编程”
    。这是20个字符,
    printf
    返回
  • 第二个最里面的
    printf
    打印
    20
    ,因为这是前一个
    printf
    的返回值
  • 外部
    printf
    打印
    2
    ,因为
    20
    有2个字符

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

    printf(“%d”,printf(“%d”,printf(“%s”,“我喜欢c编程”));
    int ret;
    //输出“我爱c编程”=>ret=20
    ret=printf(“%s”,“我喜欢c编程”);·
    //ret=20=>输出“20”=>ret=2
    ret=printf(“%d”,ret);
    打印(“%d”,ret);//ret=2=>输出“2”
    //=>我喜欢c编程202
    
    对我来说似乎有效。你的代码有什么问题?@EOF,我不明白上面给出的语句将显示什么输出??是的,它是有效的。关于它的功能,请阅读
    printf
    上的文档,尤其是它的返回值。运行它时您得到了什么?你不明白输出的哪一部分?如何改进格式字符串,使其更清晰?输出字符串出现的顺序是什么?上面语句的输出是:I love c programming 202。你能解释一下输出吗???@sagg1295添加了。将输出添加到您的问题中,而不是隐藏在某些注释中。
    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