An assignment has a lower priority in C than a comparison.
if(fp = fopen(argv[1], "r") == NULL)
The compiler could also report this because it has problems with the assignment:
error C2440: "=": "bool" cannot be converted to "FILE *".
At this point, it would otherwise have been noticed.
while ((ch = fgetc(fp)) != EOF)
I would like to note that includes from supplied headers should be written with angle brackets.
#include <ctype.h>