按升序排列3个数字 - 功能不按预期工作

时间:2013-05-21 06:24:04

标签: c arrays

作为更大问题的一部分,我必须按升序排序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;
    }
}

1 个答案:

答案 0 :(得分:5)

您按值传递数字x,y和z。所以你在order()中执行的 swap 不会反映在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;
    }
}