C语言入门问题,调试多次无解,谢谢大家

大家好。上午在写一个老师布置的上机实验代码,非常简单的一段程序,但就是得不到期望的结果,不知道是怎么回事,代码如下:

#include <stdio.h>

void fun(int x, int y, int z){

    if (y > 2 || z == 1) {
        x = x + y;
    }
    else
    {
        x = x - z;
    }
    if (x == 3 || y > 1) {
        x = x + 1;
    }
}

int main() {

    int x = 0, y = 0,z = 0;
    scanf("%d%d%d",&x, &y, &z);
    fun(x, y, z);
    printf("%d\n", x);
    return 0;

}

实验要求是测试编写测试用例测试这段代码的功能,给出的是伪代码,这是我自己根据伪代码写出的C语言代码,老师给出的伪代码如下:

void fun ( int x, int y, int z )
 { 
 if (y>2 && z == 1)
 x = x+y;
 else
 x = x-z;
 if (y == 3 || x>1)
 x = x+1;
 }

其实是非常简单的一个问题,调试后发现在执行函数体的过程中能够得到结果,但最后回到main函数中,也就是最后输出x的值时,依然是按照原输入数据输出,不知道是怎么回事。
谢谢大家!

你下面的if x和y让你调换了 判断调节都不一样的了 结果肯定不一样啊

另外你函数用的是形参 ,你main函数里的参数根本就没改变 你要是想看见改变就拿一个值去接返回值 你上面还需要return x

1.你那个逻辑有问题吧。不清楚,如果是先走一个if else 然后对结果再次if判断,那就没问题。
2.你这种写法,肯定是不会改变值的。这是经典的值传递,你应该需要使用引用传递或者是指针传值才可以。

#include <stdio.h>
#pragma warning(disable:4996)
void fun(int &x, int &y, int &z) {

    if (y > 2 || z == 1) 
    {
        x = x + y;
    }
    else
    {
        x = x - z;
    }
    if (x == 3 || y > 1) 
    {
        x = x + 1;
    }
    else {}
}

int main() {
    int x = 0, y = 0, z = 0;
    scanf("%d%d%d", &x, &y, &z);
    fun(x, y, z);
    printf("%d\n", x);
    return 0;

}

这是我改的代码。使用的是引用传值。
图片说明