It looks like all you're doing is reversing the value of the bits. I actually had better results using fprintf than fputc.
Code:
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] ) {
FILE *INSTREAM, *OUTSTREAM;
char ch;
if( ( INSTREAM = fopen( argv[1], "r" ) && ( OUTSTREAM = fopen( argv[2], "w" ) ) == NULL){
printf("Error opening file!");
exit(1);
}
while( fscanf( INSTREAM, "%c", &ch ) != EOF )
fprintf( OUTSTREAM, "%c", ~ch );
fclose( INSTREAM );
fclose( OUTSTREAM );
return 0;
}