我有點煩惱。我找不到可以從結構中排序數據的任何解決方案。看,這是我的代碼。我會解釋發生了什麼,什麼我想要做的事:按字母順序排列結構數據
(我有,如果你發現任何奇怪的話通知我的代碼從我的母語英語,所以翻譯......)
我試圖對這種國家結構進行分類。但我的錯誤是,我唯一要分類的是國名的名單..所以數據會搞砸。你能幫我一個好的算法嗎?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n;
struct Countries{
char country_code[20];
char country_name[20];
float country_area;
int country_people;
float global_income;
}*countries;
void menu();
void read();
void display();
void sort();
void exit();
int main(){
printf("Enter no of countries: "); scanf("%d", &n);
countries = malloc(n * sizeof(*countries));
menu();
}
void menu(){
int op;
printf("[1] Read;\n[2] Display;\n[3] Sort;\n[4] Exit.\n");
printf(">> "); scanf("%d", &op); fflush(stdin);
switch(op){
case 1:
read();
break;
case 2:
display();
break;
case 3:
sort();
break;
case 4:
exit();
break;
default:
break;
}
}
void read(){
printf("\n\n\n______READ______n\n\n");
int i;
for(i=0; i<n; i++){
printf("Country code #%d: ", i+1); gets(countries[i].country_code); fflush(stdin);
printf("Country name: "); gets(countries[i].country_name); fflush(stdin);
printf("Area: "); scanf("%f", &countries[i].country_area); fflush(stdin);
printf("No of people: "); scanf("%d", &countries[i].country_people); fflush(stdin);
printf("Global Income: "); scanf("%f", &countries[i].global_income); fflush(stdin);
printf("\n\n\n");
}
menu();
}
void display(){
printf("\n\n\n______DISPLAY______n\n\n");
int i;
for(i=0; i<n; i++){
printf("Country code #%d: ", i+1); puts(countries[i].country_code);
printf("Country name: "); puts(countries[i].country_name);
printf("Area: "); printf("%.2f", countries[i].country_area);
printf("\nNo of people: "); printf("%d", countries[i].country_people);
printf("\nGlobal Income: "); printf("%.2f", countries[i].global_income);
printf("\n\n\n");
}
}
void sort(){
int i, j;
char temp[20];
/* countries sorted in alphabetical order */
for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
if(strcmp(countries[i].country_name, countries[j].country_name)>0){
strcpy(temp,countries[i].country_name);
strcpy(countries[i].country_name, countries[j].country_name);
strcpy(countries[j].country_name, temp);
}
}
}
for(i=0; i<n; i++){
printf("\n\nCountry: "); puts(countries[i].country_name);
printf("Population density: ");
printf("%.2f", ((float)countries[i].country_people)/((float)countries[i].country_area));
printf("\nIncome per people: ");
printf("%.2f", ((float)countries[i].country_people)/((float)countries[i].global_income));
}
}
void exit(){
free(countries);
getch();
}
所以當你換了結構的其他要素國家數據同樣的事情做。或者簡單地複製整個結構。 –