台灣最大程式設計社群網站
線上人數
876
 
會員總數:240116
討論主題:186186
歡迎您免費加入會員
討論區列表 >> C/C++ >> Struct 和 qsort 一起用的問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Struct 和 qsort 一起用的問題
價值 : 100 QP  點閱數:72 回應數:2

樓主

哈囉阿
門外漢
0 1
8 1
發送站內信

各位大大您們好
小弟新手首發,有違規麻煩跟我說,謝謝
-------------------------問題---------------------------------------
最近剛學C/C++,目前用 Dev C++ 5.11 cpp檔
我想寫一個struct 內含學生的名字,身高,體重。
先用動態配置分配n學生,再對學生體重和身高進行兩種排序~

但如果把struct和qsort 合起來用,卻發現有兩個問題
Q1)我的qsort無法排序
Q2)我的第二組qsort排序會產生程式錯誤

因為非本科畢業,找BUG找了半天,希望有大神多多指教,謝謝

-------------------程式碼如下--------------------------------------
#include<stdlib.h>
#include<stdio.h>
struct Std
{
char name[8];
int W;
int H;
};
void Input(Std *q)
{
scanf("%s %d %d",q->name,&q->W,&q->H);
}
void Output(Std *q)
{
printf("%s %d %d\n",q->name,q->W,q->H);
}
int cmpW(const void *p1,const void *p2)
{
const Std *pf1 = (const Std*) p1;
const Std *pf2 = (const Std*) p2;
return (int)(pf1->W - pf2->W);
}
int cmpH(const void *p1,const void *p2)
{
const Std *pf1 = (const Std*) p1;
const Std *pf2 = (const Std*) p2;
return (int)(pf1->H - pf2->H);
}
int main()
{
int n;
printf("n = ");
scanf("%d",&n);
Std *p = (Std*)malloc(sizeof(Std)*n);//動態配置N個學生
printf("Type your Name/W/H\n");
for(int i=0;i<n;i++)
{
Input(p+i);
}//輸入學生名字,身高,體重
qsort(p,n,sizeof(Std)*n,cmpW);//對體重進行排序
printf("Sorted by W\n");
for(int i=0;i<n;i++)
{
Output(p+i);
}
qsort(p,n,sizeof(Std)*n,cmpH);//對身高進行排序
printf("Sorted by H\n");
for(int i=0;i<n;i++)
{
Output(p+i);
}
free(p);
}
------------------------DEMO 如下--------------------------------------

搜尋相關Tags的文章: [ struct ] , [ qsort ] , [ malloc ] , [ 動態配置 ] , [ pointer ] ,
本篇文章發表於2017-07-11 14:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

淺水員
檢舉此回應
1. qsort 第 3 個參數是「每個元素的大小」,所以用 sizeof(Std) 就好,不需要乘上 n。
2. Std 使用時,前面還是要加 struct 關鍵字,不然它不知道 Std 是什麼。例如:

本篇文章回覆於2017-07-12 12:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

哈囉阿
檢舉此回應
原來是元素大小~ 看來觀念太薄弱了 ~_~
我懂了 謝謝 你!!!!!!!
本篇文章回覆於2017-07-13 23:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.