c排序问题(结构体与文件)


#include <stdio.h> #include <string.h> int paixu(void); struct people { char name[10]; char num[20]; char addr[50]; }; int main() { paixu(); return 0; } int paixu( ) { int q,i,j,k,n=0; char c; struct people record[100],*p,temp; FILE *fp; fp=fopen("e://wenjian.txt","r+"); //所需文件不在源文件所在目录下,必须指明路径 if(fp==NULL) { printf("/n 打开文件失败!/n"); return; } p=record; while(feof(fp)==0) { fscanf(fp,"%s/t%s/t%s",p->name,p->num,p->addr); p++; n++; } fclose(fp); printf("/n按升序(9)还是按降序排列(10)?"); scanf("%d",&c); switch(c) // if结构写得很乱,改成switch { case 9: p = record; for(q=0; q<(n-1); q++) { k=q; for(j=q+1;j<n;j++) if(strcmp((p+k)->name,(p+j)->name)>0) k=j; if(k!=q) { temp=*(p+k); *(p+k)=*(p+q); *(p+q)=temp; } } break; case 10: p=record; for(q=0;q <n-1;q++) { k=q; for(j=q+1;j <n;j++) if(strcmp((p+k)->name,(p+j)->name) <0) k=j; if(k!=q) { temp=*(p+k); *(p+k)=*(p+q); *(p+q)=temp; } } break; default: printf("/n   非法字符!/n"); return; } for(i=0;i<n;i++) { p=&record[i]; printf("%s/t%s/t%s/t/n",p->name,p->num,p->addr); } fp=fopen("wenjian_out.txt","w+"); if(fp==NULL) { printf("/n 打开文件失败!/n"); return; } for(p=record;p<record+n;p++) fprintf(fp, "%s/t%s/t%s/t/n",p->name,p->num,p->addr); fclose(fp); return 0; } /* wenjian.txt内容 name1 0001 addr1 name2 0002 addr2 name5 0005 addr5 name3 0003 addr3 name9 0009 addr9 name7 0007 addr7 name8 0008 addr8 name6 0006 addr6 wenjian_out.txt 9 name1 0001 addr1 name2 0002 addr2 name3 0003 addr3 name5 0005 addr5 name6 0006 addr6 name7 0007 addr7 name8 0008 addr8 name9 0009 addr9 */

C的排序问题:http://topic.csdn.net/u/20090618/20/1d6ced52-b2fd-463b-92b3-ac8194ac0c34.html?65653

 

 

你可能感兴趣的:(c排序问题(结构体与文件))