c - 如何使我的代码按升序对输入进行排序?

标签 c

我想随机输入3个数字,然后升序输出。
大一>小
你知道我的意思吗?

#include <stdio.h>
int main(void) {

    int a, b, c;
    int min, mid, max;


    scanf("%d %d %d", &a, &b, &c);

    if (a > b) {
        max = a;
        min = b;
    }

    else {
        max = b;
        min = a;
    }

    mid = c;

    if (c > max) {
        max = c;
        mid = a > b ? a : b;
        min = a < b ? a : b;
    }

    else if (c < min) {

        min = c;
        mid = a < b ? : a : b;
            max = a > b ? : a : b;

    }

    printf("1:%d 2:%d 3:%d", max, mid, min);



    return 0;

}

最佳答案

代码不合逻辑,困惑。对 3 个数字进行排序的最简单方法是使用 swap 三次:

if (a > c) swap(&a, &c);
if (a > b) swap(&a, &b);
if (b > c) swap(&b, &c);

引入新变量是没有必要的,而且我不相信它们都在每个控制路径上设置,因此可能会产生未定义的结果。要构建交换,请参阅Is there a built-in way to swap two variables in C ,或使用这个:

void swap(int* a, int* b)
{
   int t = *b;
   *b = *a;
   *a = t;
}

最后,不要忘记检查scanf的返回值;在你的情况下应该是 3。

关于c - 如何使我的代码按升序对输入进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57787785/

相关文章:

c - 使用退格键的 NCurses

c - 以太网头的长度一定是 14 吗?

c - 关于 malloc,这个变量指向什么?

c - c程序中的strcat不起作用

c - 套接字编程(sys/socket.h)

c++ - Qt Creator 找不到标题(说 : "No such file or directory")

c++ - c语言实现密码安全的程序?

c - 如何在 for 循环中创建一个 char 数组和 2 个 void 18 次,每次都具有不同的名称(数字)?

C (WinAPI) - 获取互联网文件的大小

c - 给定一个数字列表,查找输入某个数字的第一次和最后一次