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