关于C中的强制转换和++运算符的奇怪事实[关闭]

wmvff8tz  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(75)

**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受答复。

这个问题似乎不是关于在help center定义的范围内编程。
2天前关闭。
Improve this question
我正在学习C,我发现++运算符可能有更高的转换优先级,但这对我来说很奇怪!
下面是我的代码:

#include <stdio.h>

#define SUFF 18
#define PROM 1
#define BOCC 0

int main(int argc, char* argv[])
{
    int v1, v2;
    float ris1, tmp;
    int ris2, ris3;

    scanf("%d", &v1);
    scanf("%d", &v2);

    if (v1 >= SUFF && v2 >= SUFF)
        ris3 = PROM;
    else
        ris3 = BOCC;

    ris1 = ((float)v1 + v2) / 2;

    tmp = ris1 - (int)ris1;

    if (tmp >= 0.5)
        ris2 = (int)ris1 + 1;
    else
        ris2 = (int)ris1;

    printf("%d %d\n", ris2, ris3);

    return 0;
}

我指的是这一行:

ris2 = (int)ris1 + 1;

输入:18 19输出:19 1正确!
如果我把它改成这样:

ris2 = (int)ris1++;

输出变为:18 1错误!
我以为两个密码的结果都一样。

b4lqfgs4

b4lqfgs41#

ris2 = (int)ris1++;,(后增量-增量稍后发生)类似于

ris2 = (int)ris1;
ris1++;

它不像ris2 = (int)ris1 + 1;
ris2 = (int)++ris1;,(预增量)类似于

ris1++;
ris2 = (int)ris1;

这就像ris2 = (int)ris1 + 1;期望ris1也是递增的。
(int)转换与此问题无关。

相关问题