C - 动态数组中的排序不适用于特定数量的值
C - Sorting in dynamic array doesn't work for specific number of values
我的任务是为从文件中读取的整数值创建一个排序算法。这些值必须在一个数组中排序,因为值的数量是可变的,我使用了一个动态整数数组(实际上是我第一次)。
现在,该算法似乎工作正常,因为它以正确的顺序打印所有值,但只有在有 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;
}
请原谅德语变量名和新手风格的代码。
如果现在我的"file"内容如下:
6
1
5
1
99
7
8
该程序将无法运行。如果我更改值的数量,一切都很好,但是只要值的数量是 6,程序就无法运行,无论有什么值。
您越界导致此处出现未定义行为:
for (i = 0; i <= anzahl; ++i)
^
这一行应该比较 less than
而不是 equal or less than
。
同时检查 calloc() return 值总是一个好主意。
我的任务是为从文件中读取的整数值创建一个排序算法。这些值必须在一个数组中排序,因为值的数量是可变的,我使用了一个动态整数数组(实际上是我第一次)。
现在,该算法似乎工作正常,因为它以正确的顺序打印所有值,但只有在有 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;
}
请原谅德语变量名和新手风格的代码。
如果现在我的"file"内容如下:
6
1
5
1
99
7
8
该程序将无法运行。如果我更改值的数量,一切都很好,但是只要值的数量是 6,程序就无法运行,无论有什么值。
您越界导致此处出现未定义行为:
for (i = 0; i <= anzahl; ++i)
^
这一行应该比较 less than
而不是 equal or less than
。
同时检查 calloc() return 值总是一个好主意。