gpt4 book ai didi

c - 使用 C 排列文件中的数字

转载 作者:行者123 更新时间:2023-11-30 14:52:18 25 4
gpt4 key购买 nike

我需要获取两个文件“numbers1.txt”和“numbers2.txt”(其中数字按升序列出)中列出的数字,并将它们移动到名为“output.txt”的文件中按升序排列。

这是我到目前为止所拥有的:

void appendToOutput(FILE *numFile1, FILE *numFile2, FILE *outputFile)
{
int num1 = 0;
int num2 = 0;

do {
fscanf(numFile1, "%d", &num1);
fscanf(numFile2, "%d", &num2);
while ((num1 < num2) && !feof(numFile1))
{
fprintf(outputFile, "%d\n", num1);
fscanf(numFile1, "%d", &num1);
}
while ((num2 < num1) && !feof(numFile2))
{
fprintf(outputFile, "%d\n", num2);
fscanf(numFile2, "%d", &num2);
}
if (num1 == num2)
{
fprintf(outputFile, "%d\n%d\n", num1, num2);
}
} while (!feof(numFile1) || !feof(numFile2));

return;
}

我的文件如下所示:

numbers1.txt

1
2
3
4
5
6
7
8
9
10
11
12

numbers2.txt:

2
4
6
8
10
12
14
16
18
20
22
24

我遇到的问题是输出文件最终看起来像这样:输出.txt

1
2
2
3
4
4
5
6
6
7
8
8
9
10
10
11
12
12

所以我的问题是,程序不会继续从numbers2.txt 读取/写入数字,即使它尚未到达文件末尾。我已经查看了它,但似乎无法找出它停止的原因,因此我们将不胜感激!

最佳答案

当前代码存在一些问题

  1. 这 2 个数字的初始化应在主循环之前执行
  2. 使用feof()这里
  3. 严格测试<代替 <= (可以锁定你的算法)
  4. 如果另一个文件变空,则继续读取另一个文件

关于2.,fscanf返回数字>0如果它可以读取该数字,那么您可以测试它而不是检查 feof (这表示 EOF(停止条件)之前发生过,这可能会再次触发不需要的迭代)。

建议的固定代码:

int read1 = fscanf(numFile1, "%d", &num1);
int read2 = fscanf(numFile2, "%d", &num2);

while (read1 > 0 || read2 > 0) {
while (read1 > 0 && (read2<=0 || num1 <= num2))
{
fprintf(outputFile, "%d\n", num1);
read1 = fscanf(numFile1, "%d", &num1);
}
while (read2 > 0 && (read1<=0 || num2 <= num1))
{
fprintf(outputFile, "%d\n", num2);
read2 = fscanf(numFile2, "%d", &num2);
}
}

进一步说明

  • readX<=0 || numY <= numX地址 4.
  • readX = fscanf(...)地址 2.

关于c - 使用 C 排列文件中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669155/

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