我是C语言的新手,我想我的代码还远远没有达到最佳实践的水平。
我的C程序中有一个Array结构。数组的大小为255(已分配),但并未全部使用。
示例中的Array充满了以下信息:
2;a;121212;121212;0
9;c;121212;121212;1
6;d;121212;121212;1
4;e;121212;121212;1
1;v;121212;121212;1
8;x;121212;121212;1
其余的都填充为空值。(我猜)
现在我的问题不在于实际排序。从我开始排序的时候,我就得出了我的数组为空索引并出错的地步。
书的排列:
struct book{
int ID;
char name[MAX_STR_LEN];
char dateIn[DATE_LEN];
char dateOut[DATE_LEN];
int isIn;
};
/* array of my books */
struct book books[MAX_BOOKS];
排序功能:
void sort()
{
/* first find out how many indexes there are */
int h;
for (h = 0; h< MAX_BOOKS; h++)
{
if (books[h].ID == 0)
{
break;
}
}
int j = 0;
int swaped = 1;
struct book temp;
while (swaped == 1) //bubble sort on the book name
{
for(j=0;j< h ;j++)
{
swaped = 0;
if(strcmp(books[j].name,books[j + 1].name)>0)
{
//copy to temp val
temp.ID = books[j].ID;
strcpy(temp.name,books[j].name);
strcpy(temp.dateIn,books[j].dateIn);
strcpy(temp.dateOut,books[j].dateOut);
temp.isIn = books[j].isIn;
//copy next val
books[j].ID = books[j + 1].ID;
strcpy(books[j].name,books[j + 1].name);
strcpy(books[j].dateIn,books[j + 1].dateIn);
strcpy(books[j].dateOut,books[j + 1].dateOut);
books[j].isIn = books[j + 1].isIn;
//copy back temp val
books[j + 1].ID = temp.ID;
strcpy(books[j+ 1].name,temp.name);
strcpy(books[j + 1].dateIn,temp.dateIn);
strcpy(books[j + 1].dateOut,temp.dateOut);
books[j + 1].isIn = temp.isIn;
swaped = 1;
}
}
}
}
所以我的问题是,是否可以仅对ID不为0的值进行排序?
如果您需要更多信息,我将尽力提供。
提前致谢!
for(j=0;j< h ;j++)
{
if(strcmp(books[j].name,books[j + 1].name)>0)
{
在这里,您j
从0
到都h-1
包含在内。因此,您尝试将j == h-1
最后一个元素books[j]
与下一个元素(books[j+1]
不存在)进行比较。您可能只想检查h-2
/对h-1
,即for(j=0; j<h-1; j++)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句