【发布时间】:2015-01-29 15:55:13
【问题描述】:
我的任务是为从文件中读取的整数值创建一个排序算法。这些值必须在数组中排序,因为值的数量是可变的,我使用了一个动态整数数组(实际上是我第一次)。
现在,该算法似乎工作正常,因为它以正确的顺序打印所有值,但直到有 6 个值要排序。在那种情况下,没有任何输出,似乎连排序过程都不再成功。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b){
..
}
int main(){
int i,anzahl,sorted=0,bla;
FILE *fp;
int* feld;
fp=fopen("file","r");
if (fp==NULL) return 0;
else {
fscanf(fp,"%i",&anzahl);
feld=(int*)calloc(anzahl,sizeof(int));
for (i = 0; i <= anzahl; ++i) {
fscanf(fp,"%i",&bla);
*(feld+i)=bla;
}
fclose(fp);
while (sorted==0){
for (i = 0; i < anzahl-1; ++i) {
if (feld[i]>feld[i+1]) swap(&feld[i],&feld[i+1]);
}
for (i = 0; i < anzahl-1; ++i) {
if (feld[i]<=feld[i+1]) sorted=1;
else {sorted=0; break;}
}
}
for (i = 0; i <anzahl; ++i) {
printf("%i ",feld[i]);
}
}
return 0;
}
请原谅德语变量名和新手风格的代码。
如果现在我的“文件”的内容如下:
6
1
5
1
99
7
8
该程序将无法运行。如果我改变值的数量,一切都很好,但只要值的数量是 6,无论有什么值,程序都不会工作。
【问题讨论】:
-
void swap(int *a, int *b) { .. }是什么功能太复杂不能贴出来? -
您可以对变量名进行一些搜索+替换。并且可能在您的源中永久重命名
bla -
不,事实上我认为仅仅通过它的名字就很容易理解它的功能。它只是交换 a 和 b。