当前位置: 首页 > 知识库问答 >
问题:

如何在C语言的数组结构中使用qsort()

寇和璧
2023-03-14

这个问题是由打字错误或无法再复制的问题引起的。虽然这里可能有类似的问题,但这一问题的解决方式不太可能帮助未来的读者。

我试图使用qsort()对结构中的价格进行排序。排序后,结构中的一个元素(test)变为0。你能告诉我为什么以及如何解决它吗?

谢谢

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int price;
    int test;
    int id;
} order;
order list[10];
int i = 0;

int compare (const void * a, const void * b)
{

  order *orderA = (order *)a;
  order *orderB = (order *)b;

  return ( orderA->price - orderB->price );
}

int main ()
{
    srand ( time(NULL) );

    printf("Before sorting\n");
    for(i=0; i<10; i++){ 
        list[i].price = rand()%10;
        list[i].test = rand()%10;
        list[i].id = i; 
        printf ("Order id = %d Price = %d Test = %d\n",list[i].id, list[i].price, list[i].test);           
    }
    printf("AFTER sorting\n");
    int n;
    qsort (list, 6, sizeof(order), compare);
    for (n=0; n<10; n++)
         printf ("Order id = %d Price = %d Test = %d\n",list[n].id, list[n].price, list[i].test);          
    return 0;
}

输出为:

排序前订单id=0价格=4测试=2订单id=1价格=9测试=3订单id=2价格=5测试=0订单id=3价格=2测试=8订单id=4价格=8测试=5订单id=5价格=7测试=4订单id=6价格=9测试=3订单id=7价格=1测试=1排序后订单id=8价格=8测试=4订单id=9价格=3测试=3订单id=3价格=2测试=0
订单id=0价格=4测试=0
订单id=2价格=5测试=0
订单id=5价格=7测试=0
订单id=4价格=8测试=0
订单id=1价格=9测试=0
订单id=6价格=9测试=0
订单id=7价格=1测试=0
订单id=8价格=8测试=0
订单id=9价格=3测试=0

共有1个答案

孙泉
2023-03-14

排序后,更改

printf ("Order id = %d Price = %d Test = %d\n",list[n].id, list[n].price, list[i].test); 

printf ("Order id = %d Price = %d Test = %d\n",list[n].id, list[n].price, list[n].test);
 类似资料:
  • 所谓 结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中, C语言结构体数组常被用来表示一个拥有相同 数据结构的群体,比如一个班的学生、一个车间的职工等。 在C语言中,定义结构体数组和定义结构体变量的方式类似,请看下面的例子: 表示一个班级有5个学生。 结构体数组在定义的同时也可以初始化,例如: 当对数组中全部元素赋值时,也可不给出数组长度,例如: 结构体数组的使用也很简单,例如,获取

  • 本文向大家介绍C语言中结构与数组的区别,包括了C语言中结构与数组的区别的使用技巧和注意事项,需要的朋友参考一下 在C语言中,结构和数组都用作数据类型的容器,即在结构和数组中,我们都可以存储数据,也可以对它们执行不同的操作。 在内部实现的基础上,以下是两者之间的一些基本区别。 序号 键 结构体 数组 1 定义 可以将结构定义为用作容器的数据结构,该数据结构可以容纳不同类型的变量。 另一方面,数组是一

  • 主要内容:对数组的总结,关于查找和排序数组(Array)是一系列相同类型的数据的集合,可以是一维的、二维的、多维的;最常用的是一维数组和 二维数组,多维数组较少用到。 对数组的总结 1) 数组的定义格式为: type 为数据类型,arrayName 为数组名,length 为数组长度。 需要注意的是: 数组长度 length 最好是常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,

  • 主要内容:结构体变量,成员的获取和赋值前面的教程中我们讲解了 数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。 在C语言中,可以使用 结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为: struct 结构体名{    

  • 本文向大家介绍C语言简单的数据结构,包括了C语言简单的数据结构的使用技巧和注意事项,需要的朋友参考一下 示例 结构数据类型是打包相关数据并使它们的行为像单个变量一样有用的方法。 声明一个struct包含两个int成员的简单对象: x并y称为struct的成员(或字段)point。 定义和使用结构: 可以在定义时初始化结构。以上等同于: 还可以使用指定的初始化程序来初始化结构。 也可以使用.运算符来

  • 计算机和人类发明的算盘一样,是一种计算工具。而计算机的发明就是要将人类从简单重复劳动中解放出来,所以计算机特别善于进行简单而需要大量人力才能完成的工作。 循环的做一件事情就是这样一种简单而需要耗费大量精力才能完成的一件事情。而且人工在处理这个事情的时候,还会经常出现各种错误。 循环作为计算机程序设计语言中基本的流控制语言,包含在几乎所有的程序中。比如我们常见的累加,计数,等等都是可以通过循环来完成