这个程序哪里有问题了,C语言,好奇怪

#include #define M 1000 void main() { struct chain { int num; struct chain *next; } C[M]; FILE *fp=fopen("data.txt","r"); int i; struct chain *p; for(i=0;inum) p=(p->next); C[i].next=p; p=&(C[i]); } p=&C[0]; for(i=0;inext; printf("%d\t",p->num); } } 文件的读应该没问题的,主要是指针那里,循环有问题吗 最好给出调试成功的答案,其实只是通过链表,不改变内存地址来排序
匿名用户    2009-10-27 15:15    

满意回答

修改如乡患迷下,排序部分哑厉的修改较大,程序的其它部分也有少量的修改今缘: //--------------------------------------------------------------------------- #include #define M 1000 void main() { struct chain { int num; struct chain *next; } C; FILE *fp=fopen("data.txt","r"); int i,j,m=0; struct chain *p,*q,*min=NULL; for(i=0;!feof(fp);i++) { fscanf(fp,"%d",&(C.num)); C.next=NULL; if (++m>=M) break; } fclose(fp); for (i = 0; inext==NULL) { p->next =p; if (!min) q=min=p; else { q->next=p; q=p; } } } q->next =NULL; for(;min;){ printf("%d\t",min->num); min=min->next; } } //---------------------------------------------------------------------------

匿名用户   2009-10-27 17:09
宝宝知道提示您:回答为网友贡献,仅供参考。

为您推荐:

其他回答

/******* 首先我指出你程序里的几个问题. 1,你在文件中读取数据的时候没有考虑文件结尾的问题,导致你读取失败. 2,你把读取的第一个数据做为最小的数,这对吗??? 3,当你对他们进行排序的时候,不能像你那样排. 我这个程序现在还不能处理相等的数,你如果想处理的话,在你的struct结构体里面...加上一个 标志位,当排序的时候,已进行过排序的数据给他打上标记,就能够对相等的数据进行排序了. 你自己试试吧. *******/ #include #include #define M 1000 void main() { struct chain { int num; struct chain *next; } C; FILE *fp; int i,cover; int min,kmin,head,last,count;//min为每次找到的符合条件的最小值,kmin为MIN相应的下标,head为全部数据中最小数据的下标,count最终无重复数据个数. struct chain *p; p=(struct chain*)malloc(sizeof(struct chain)); /**检测文件是否打开**/ if((fp=fopen("d:\\data.txt","r"))==NULL) printf("cann't open"); /**循环读数**/ for(i=0;inum) if(C.numnext=&(C); p=&(C); } p=&C; for(i=0;inum); p=p->next; } }

全部展开 收起
匿名用户    2009-10-27 20:16

排序算法错的。你的算法只是把每个比C小的各元素的链接指向首个元素,比C ->C C ->C ... ->C C ->C 其余C next置为NULL。 连C ... C都没排过序 其它更没有 还是好好再学学算法吧

匿名用户    2009-10-27 17:08