作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码需要做三件事:
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
放入我的数组中。我的实现怎么不正确?
最佳答案
&
是取址运算符。您将其作为指针传递。您需要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)
提供了更好的时间.
注意:我还没有测试您的文件操作,因为您说它们工作正常。
关于c - 如何从c中的文件中搜索元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979956/
我是一名优秀的程序员,十分优秀!