C file handeling: 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*/
    	file2 = 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;
    }