为什么printf()打印这样的东西?

时间:2016-03-23 05:27:15

标签: c

我在互联网上发现了一个问题,就是有一个 C 程序,就像 -

int main(){
   int a = 123;
   printf("%d", printf("%d",a));
   return 0;
}

我在 Codeblocks 运行此程序,并找到结果 1233
我的问题是为什么printf()就像这样?

3 个答案:

答案 0 :(得分:5)

请参阅printf是一个返回int的函数。其中intcharacters打印的数量。

这是printf原型

int printf(const char *restrict format, ...)

根据您的计划:

printf("%d", printf("%d",a));
<printf("%d",a)其中a123,因此打印123并返回3
并且printf("%d", printf("%d",a));变为printf("%d",3);因此它仅打印3印刷品 所以你的输出是:
1233

答案 1 :(得分:2)

分手以理解它。 printf函数的返回值 成功时,是成功写入的字符总数。

printf("%d",a)成功写入3个字符,然后将该值作为第二个参数返回以传递给原始调用

printf("%d", 3 );  

在评估参数时传递第二个printf,然后在外部printf中传递其结果。

答案 2 :(得分:1)

Printf始终返回字符数。因为a = 123意味着3个字符,所以输出结果为1233.你将从这个例子中理解。

    select chargeid,
    totalamount-isnull(lag(amount) over(partition by chargeid order by chargeid),0) as amount,
    payamount as pay
from (
    select t2.chargeid
        ,t1.totalamount
        ,sum(t2.payamount) over (
            partition by t2.chargeid order by t2.paymentid
            ) as amount,
            t2.payamount
    from tblCharge t1
    join tblpayment t2 on t1.chargeid = t2.chargeid
    ) a