0

该程序应查看 的每一行,file1然后查看 . 中是否存在完全相同的行file2。如果是,则将该行复制到一个名为 output 的新文件中。

说,以下是文件的内容(可能是句子,但为简单起见,我放了数字。)-

  file1              file2
    1                 2
    2                 4
    3                 15
    4                 6
    5                 11
    6                 8
    7
    8
    9

然后output文件应该看起来像 -

 (Expected) output
              2
              4
              6
              8

在 shell 内部,我可以看到 printfoutput按预期打印,但是 fprintf 颠倒了顺序,我不明白为什么?打印到输出文件的输出是 -

 output
    8
    6
    4
    2

这是代码 -

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *file1, *file2, *output;
    int c;

    /*Creating buffers where data will be stored for comparison*/   
    char buffer1[999], buffer2[999];

    /*Settig the buffer characters array to 0*/
    memset(buffer1, 0, sizeof(buffer1));
    memset(buffer2, 0, sizeof(buffer2));

    /*Open output file in "w" so that it clears the file*/
    output = fopen("output", "w");
    /*Open file1 and then save the line inside buffer1 (within while loop)*/
    file1 = fopen("file1", "r");
    /*Read each character in file until End Of Line*/
    while((c = getc(file1)) != EOF)
    {
        int i = 0;
        /*Save each new line of file1 in buffer1 for comparison*/
        while(c != '\n')
        {
            buffer1[i++] = c;
            c = getc(file1);
        }

        /*Open file2 and then save it's line in buffer2 (withing while loop)*/      
        file2 = fopen("file2", "r");
        int ch;

        while((ch = getc(file2)) != EOF)
        {
            i = 0;
            while(ch != '\n')
            {
                buffer2[i++] = ch;
                ch = getc(file2);
            }

            /*Compare lines of file1 against each line of file2*/
            if(strcmp(buffer1,buffer2) == 0)
            {
                /*Save similar lines in a file named output*/
                output = fopen("output", "a");
                fprintf(output,"%s\n", buffer2);
                printf("%s\n", buffer2);
                break;
            }
            /*Reset the buffer*/
            memset(buffer2, 0, sizeof(buffer2));
        }

        memset(buffer1, 0, sizeof(buffer1));
    }

    /*Close the output file if there were any comparison made i.e. if file was opened*/
    if(output != NULL)
    {
        fclose(output);
    }

    /*Close other files*/
    fclose(file1);
    fclose(file2);

    return 0;
}
4

1 回答 1

4

在每个差异处打开 ,最后只关闭一次,这是错误的,可能会导致您的问题。尝试打开一次,也许在循环之前。如果您没有发现任何差异,您可以将其删除,以避免出现空文件。output output

于 2012-07-28T06:00:43.503 回答