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

シェルの内部では、printfの印刷outputが期待どおりに表示されますが、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 に答える