If i understand that correctly, you are creating a char array with 20 elements, but would allow reading up to 100 characters into it. If there is a proper newline before 21 chars, then that isn't the problem now, but it is a flaw in the program.
What's really weird is that you are reading characters with fgets, and then immediately reading even more into the same array with scanf.
Another flaw is that you might read more than 20 lines and overflow your array. I'm not really sure what you are trying to do.
I think that the problem is in your call to fopen - *argv is the same as argv[0] and argv[0] is always the address of your program - so you're actually reading from the executable.
Calling fopen(argv[1],"r") will fix this by opening the input file, which is the second element of the array argv.
EDIT:
Also, I would suggest using <fstream> and <iostream> instead of <cstdio> - they will automatically ignore whitespaces and newlines. fscanf won't necessarily do that.