2

作为一个更大问题的一部分,我必须按升序对 3 个数字进行排序。一个足够简单的任务,但由于某种原因,我没有得到预期的结果。不允许使用数组。如果您能说出问题所在,请告诉我。我一直在绞尽脑汁,只是看不到它:<谢谢!

#include <stdio.h>

void order(int a, int b);

int main(void)
{       
    int x, y, z;

    scanf("%d %d %d", &x, &y, &z);

    order(x, y);
    order(x, z);
    order(y, z);

    printf("%d %d %d", x, y, z);

    return 0;
}

void order(int a, int b)
{
    int inter;

    if(a > b)   
    { 
        inter = a;
        a = b;
        b = inter;
    }
}
4

1 回答 1

5

您正在按值传递数字 x、y 和 z。所以你在 order() 中所做的交换不会反映在 main() 中。

而是传递变量的地址并修改它们,以便 main() 中的原始变量反映您在 order() 中所做的更改:

#include <stdio.h>

void order(int *a, int *b);

int main(void)
{       
    int x, y, z;

    scanf("%d %d %d", &x, &y, &z);

    order(&x, &y);
    order(&x, &z);
    order(&y, &z);

    printf("%d %d %d", x, y, z);

    return 0;
}

void order(int *a, int *b)
{
    int inter;

    if(*a > *b)   
    { 
        inter = *a;
        *a = *b;
        *b = inter;
    }
}
于 2013-05-21T06:27:01.233 回答