我的代码需要做三件事:
FILE1
中的数字读入数组(动态)FILE2
的数字输入。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main (int argc, char *argv[]) {
FILE *fp1 = fopen ("myFile1.txt", "r");
if (fp1 == NULL) {
printf ("cannot open this file");
exit (0);
}
FILE *fp2 = fopen ("test1.txt", "w");
if (fp2 == NULL) {
puts ("Not able to open this file");
exit (1);
}
int i = 0, num, j, k;
int *B = NULL;
int *C;
int a;
int size = 32;
B = malloc (sizeof (int) * size);
while (fscanf (fp1, "%d", &num) == 1) {
if (i < size) {
B[i] = num;
fprintf (fp2, "%d\r\n", num);
i++;
}
else {
C = malloc (sizeof (int) * 2 * size);
memcpy (C, B, size * sizeof (int));
free (B);
B = &C[0];
B[i] = num;
i++;
size = size * 2;
i++;
for (j = 0; j < size; ++j) {
for (k = j + 1; k < size; ++k) {
if (B[j] < B[k]) {
a = &B[j];
B[j] = B[k];
B[k] = a;
}
}
}
printf ("after sorting");
for (j = 0; j < size; ++j)
printf ("%d\n", B[j]);
}
}
return 0;
fclose (fp1); /* note this code is never reached */
fclose (fp2);
}
我成功完成了从文件中读取数字的第一部分。但我无法理解如何对这些数字进行排序。
我正在尝试应用冒泡排序,但它会将0
放入我的数组中。我的实施方式有何不正确?
答案 0 :(得分:1)
&
是地址运营商。你把它作为指针传递。您需要a = B[i]
,因为a
是int
。
现在,您可以对数字进行降序排序,如果您希望它们升序,请将<
更改为>
中的(B[j] < B[k])
。
此外,您必须始终检查malloc
是否成功,例如:
if (!B) {
fprintf(stderr,"B alloc error");
exit(-1);
}
您也可以考虑realloc
。
此外,qsort
中有一个内置的stdlib.h
,其时间比O(n^2)
好得多。
注意:我没有测试过您的文件操作,因为您说它们正常工作。