printf函数中从右到左计算不应该是输出842吗,为什么会是882?

img


printf函数中从右到左计算不应该是输出842吗,为什么会是882?

i++先取值后++,取到的值被缓存起来了
而++i是先++后取值,最终取的是i的值
i*=2返回的也是i本身
那么这个表达式等价于:
a=i++;
++i;
i*=2;
print(i,i,a)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/863103
  • 你也可以参考下这篇文章:串口调试printf()函数
  • 除此之外, 这篇博客: printf 详解 - 你所不知道的printf用法中的 ②十进制输出技巧 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里我们只需要先创建两个整形变量int num = 10;int count = 5;

    输出格式释义
    printf("%2d", num);%2d 它所表示占2个输出位置,数字靠右对齐,位数不足2个则在左边补空格
    printf("%-2d", num);%-2d 它所表示占2个输出位置,数字靠左对齐,位数不足2个则在右边补空格
    printf("%*d", count, num);%*d 表示占count = 5个输出位置,数字靠右对齐,位数不足5个则在左边补空格
    printf("%-*d", count, num);%-*d 表示占count = 5个输出位置,数字靠左对齐,位数不足5个则在右边补空格
    printf("%.4d\n", num);%.4d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充
    printf("%04d\n", num);%04d表示占4个输出位置,如果输出的内容不足4位则只在左边用零填充


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^