0

我正在创建一个程序,它采用两个 .txt(data1.txt,data2.txt)文件,其中包含按升序存储的整数,并将它们按升序合并到 output.txt(data3.txt)中。我正在使用 fgets 函数从 .txt 文件中读取每个 int,并使用 if 函数(根本不起作用)比较两个 input.txt 文件中的 fgets。所以我的问题是比较两个 fgets 函数以按升序对整数进行排序的正确方法是什么?

data1.txt 包含:5 15 25 35 45

data2.txt 包含:10 20 30 40 50

这是代码:

#include <stdio.h>
#include <stdlib.h>
#define LINE_LENGTH 80


int main()
{
FILE *in1, *in2, *out;
char buffer1[LINE_LENGTH+1], buffer2[LINE_LENGTH+1];
int ch1, ch2;


in1 = fopen("data1.txt", "r");
in2 = fopen("data2.txt", "r");
out = fopen("data3.txt", "w");

if(in1 == NULL || in2 == NULL)
{
    fprintf(stderr, "Cannot open input file - exiting!\n");
    exit(1);
}
if(out == NULL)
{
    fprintf(stderr, "Cannot open output file - exiting!\n");
    exit(1);
}

while( ! feof(in1) ) #Checking for end of file
{
    fscanf(in1, "%d", &ch1);
    fscanf(in1, "%d", &ch2);
    if (ch1 <=  ch2) fputs(ch1, out);
    else fputs(ch2, out);
}


while( ! feof(in2) ) #Checking for end of file
{
    fscanf(in1, "%d", &ch1);
    fscanf(in2, "%d", &ch2);
    if (ch2 <=  ch1) fputs(ch2, out);
    else fputs(ch1, out);
}

fclose(in1);
fclose(in2);
fclose(out);

return 0;

}

希望我涵盖了所有内容,如果您需要更多信息,请告诉我

谢谢!

- - - - - - - 编辑 - - - - - -

我正在尝试使用 fscanf 实现 while 循环,但是 gcc 会抛出错误:“为包含 fputs 函数的每一行传递 'fputs' 的参数 1 使指针从整数而不进行强制转换”。我不应该将 fputs 与 fscanf 一起使用,还是 ch1/ch2 应该是不同的格式?

4

2 回答 2

1

我认为您并不真正了解 fgets 的作用。它读取一行(如果缓冲区足够大)并将其存储到缓冲区中。然后它返回一个指向同一个缓冲区的指针,比较没有意义。您需要读取每个整数并比较它们,您可能希望使用fscanf(in1, "%d", &n);将整数读入 n,这将忽略任何空格,并且如果您知道您的文件只包含数字,它将很好用。此外,您正在阅读超出文件末尾的内容in1,可能还有in2.

再想一想,因为您似乎并不真正了解发生了什么。

于 2012-04-23T22:46:25.103 回答
1

fgets用于从流中获取字符串。你最好fscanf是阅读整数的用户。我的建议是首先将这些文件读入两个单独的数组,然后对它们进行排序。如果文件变大,保持文件打开可能会导致错误。这是将文件读入整数数组的示例代码。

int* readFile(int *array, char *file) {
    FILE *fp = fopen(file, "r");
    int x;
    int i = 0;

    while (fscanf(fp, "%d", &x) == 1) {
        *(array+i) = x;
        i++;
    }
    fclose(fp);

    return array;
}
于 2012-04-23T22:49:44.437 回答