C语言中打印布尔值后跟整数的逻辑错误

问题描述 投票:0回答:1
#include<stdio.h>
int main()
{
    int x=15;
    printf("\n%d%d%d",(x!=15),(x=20),(x>=15));
    return 0;
}

在上面的程序中,期望的输出应该是:

0201
但我得到输出:
1201

我的代码有什么问题?为了实现所需的操作,它应该是什么?

c printing type-conversion
1个回答
0
投票

函数参数的求值是无序的,即它们可以按任何特定顺序求值。而且,由于您在单个表达式中读取和修改

x
且中间没有序列点,因此会在代码中触发 未定义行为

您需要将打印分解为单独的语句:

printf("%d\n",(x!=15));
printf("%d\n",(x=20));
printf("%d\n",(x>=15));
© www.soinside.com 2019 - 2024. All rights reserved.