【问题标题】:nested calls to printf [duplicate]嵌套调用 printf [重复]
【发布时间】:2018-04-13 02:35:25
【问题描述】:
#include <stdio.h>
void main()
{
   printf("%d", printf("%d",printf("Hello world!\n")));
}

为什么输出为 132 ? hello world 有 13 个单位长。

【问题讨论】:

  • 请使用正确的标题,不要只在标题中放代码。
  • 对不起,我是新来的..我正在更改标题
  • 正确的标题...“无法理解 C 代码”太笼统了。
  • 您将字符打印为整数。你希望它打印什么?字符串的长度?
  • @Matt 实际上,它根本不打印字符。它确实打印了printf() 函数的返回值。

标签: c printf


【解决方案1】:

如果将语句拆分为多个语句,您可能会更清楚地看到发生了什么:

int temp1 = printf("Hello world!\n");
int temp2 = printf("%d", temp1);
printf("%d", temp2);

第一个printf 打印Hello world!\n。由于这是 13 个字符,因此它返回 13

第二个printf 打印13。由于这是 2 个字符,因此它返回 2

第三个printf 打印2

所以完整的输出将是:

Hello world!
132

如果您添加更多换行符,情况会更明显:

printf("%d\n", printf("%d\n",printf("Hello world!\n")));

将打印:

Hello world!
13
3

【讨论】:

  • 谢谢,我明白了。我以为是一百三十二。
  • 如果你在数字后面加上空格或换行符,就不会那么混乱了。
  • 实际上它正在返回 Hello world! 13 3 是新线吗?
  • @DhrubaGoswami 是的,你现在已经掌握了窍门 :) 我认为最后 2 只是一个错字。
  • @Lundin 不是错字,只是忘记了更改会产生次要影响,我实际上并没有尝试过。
【解决方案2】:

打开man 3 printf 并检查它返回的内容

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

在您的情况下,printf("Hello world!\n") 第一次打印Hello world!,然后返回没有可打印字符,即13,再次打印2,因为13 具有2 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多