gpt4 book ai didi

c - 如何从c中的文件中搜索元素

转载 作者:行者123 更新时间:2023-11-30 15:12:35 24 4
gpt4 key购买 nike

我的代码需要做三件事:

  • 将文件 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] ,自 aint

现在您对数字进行降序排序,如果您希望它们升序,请更改 <>如果 (B[j] < B[k]) .

此外,您必须始终检查 malloc 是否成功与否,例如:

if (!B) {
fprintf(stderr,"B alloc error");
exit(-1);
}

您也可能需要考虑realloc .

另外还有一个内置的qsortstdlib.h ,这比 O(n^2) 提供了更好的时间.

注意:我还没有测试您的文件操作,因为您说它们工作正常。

关于c - 如何从c中的文件中搜索元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com