【发布时间】:2015-12-09 07:48:12
【问题描述】:
所以我有一个包含月份和日期的结构数组,我想对其进行排序,以便第一个结构将保存第 1 个月的第 1 天,第二个结构将保存第 1 个月的第 2 天,依此类推。
我试图通过将正确的数组存储在时间数组中然后替换它们来做到这一点。
我的问题是,要执行以下操作,我可以使我的唯一算法崩溃我的提示并给我一个分段错误。到目前为止,我已经很困惑了,不知道我的逻辑是错误的,还是我以一种过于复杂的方式来执行它,以至于程序无法正常工作。
这是我的鳕鱼的功能
void sortData(struct StructData data[], int size){
int i=0,x=0,z=0,v_day=0,v2_day=0;
struct StructData temp[sz];
for (i=0;i!=12;i++){
for (x=0;x!=12;x++){
if (data[x].month == i+1){
for (v=0;v!=31;v++){
for(v2=0;v2!=31;v2++){
if (data[v2].day == v+1){
temporal[z] = data[v2];
z=z+1;
}
}
}
}
}
}
i=0;
for (i=0;i!=size;i++){
data[i] = temporal[i];
}
}
可能有更好的方法来做到这一点,我只是不明白。
【问题讨论】:
-
尝试使用 qsort:stackoverflow.com/questions/1787996/…
-
这里的Segfault可能是由于超出了数组索引。使用调试器,它会告诉您段错误发生的确切位置。如果您不知道如何使用调试器,那么现在是时候开始学习它了。如果您想要更多答案,请显示更多代码。
-
@Phyreprooph 我虽然是这样,但我怎么能按照该规则对整个结构进行排序呢?我不想只对日子进行排序。我需要对整个结构进行排序,因为它包含特定日期的数据。
-
你会添加你的结构吗?
-
@MichaelWalz 我将整个功能添加到帖子中。通过“超出键数组索引”,您的意思是我正在使用我没有的变量?如果是这样,我认为这不会是一个问题,因为我正在使用一个'if'语句,只要它不符合要求,它就不应该对变量进行操作。