Skip to content

Instantly share code, notes, and snippets.

@radiofreejohn
Created May 30, 2011 22:29
Show Gist options
  • Save radiofreejohn/999579 to your computer and use it in GitHub Desktop.
Save radiofreejohn/999579 to your computer and use it in GitHub Desktop.
K&R exercise 7-6 compare two files
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 1000
int main(int argc, char *argv[])
{
FILE *fileA, *fileB;
char filenameA[257];
char filenameB[257];
char *prog = argv[0];
char bufferA[MAXLINE];
char bufferB[MAXLINE];
char *bA;
char *bB;
int comp = 0;
int linenum = 0;
if (argc != 3)
{
fprintf(stderr, "Usage\n%s fileA fileB\n", prog);
exit(1);
}
if ((fileA = fopen(*++argv, "r")) == NULL)
{
fprintf(stderr, "%s: can't open %s\n", prog, *argv);
exit(2);
} else {
strcpy(filenameA,*argv);
}
if ((fileB = fopen(*++argv, "r")) == NULL)
{
fprintf(stderr, "%s: can't open %s\n", prog, *argv);
exit(2);
} else {
strcpy(filenameB,*argv);
}
while (!comp)
{
bA = fgets(bufferA, MAXLINE, fileA);
bB = fgets(bufferB, MAXLINE, fileB);
if (bA && bB)
{
comp = strcmp(bufferA, bufferB);
linenum++;
} else {
comp = 1;
}
}
if (bA && bB)
{
printf("Files differ at line %d:\n", linenum);
printf("%s:\t%s", filenameA, bufferA);
printf("%s:\t%s", filenameB, bufferB);
} else {
if (!bA && !bB)
{
printf("Files are the same\n");
} else if (!bA)
{
printf("%s differs after end of %s\n",filenameB, filenameA);
printf("%s:\tEOF\n", filenameA);
printf("%s:\t%s", filenameB, bufferB);
} else if (!bB)
{
printf("%s differs after end of %s\n",filenameA, filenameB);
printf("%s:\t%s", filenameA, bufferA);
printf("%s:\tEOF\n", filenameB);
}
}
fclose(fileA);
fclose(fileB);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment