简体   繁体   中英

C file handling: Text doesn't append at the end of the file

The program should look at each line of file1 and then, see if the exact same line exists in file2 . If it does, then copy the line to a new file named output.

Say, following are the content of files (It could be sentence but for simplicity, I've put numbers.)-

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

Then output file should look like -

 (Expected) output
              2
              4
              6
              8

Inside shell I can see printf prints output as expected, but fprintf inverts the order and I don't understand why? Output that gets printed to the output file is-

 output
    8
    6
    4
    2

Here's the code -

#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;
}

you are opening output at each difference and closing just one time at the end this is wrong and maybe causing your problem. Try to open output once, maybe before the loop. You can remove it if you dont find any difference, to avoid an empty file.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM