Because it's getting the EOL character as well as the one you type.
Your input isn't 'a', 'b', it's 'a\nb\nc\n', and your script is configured to (basically) output a new line after every character.
So the first time through the loop, it gets 'a' and prints 'a\n', then it gets '\n' and prints '\n\n'. Then 'b' and 'b\n', etc.
Try this on for size:
int main() {
int size = 500;
char buff[size];
char* check;
int read;
check = fgets(buff, sizeof(buff), stdin);
while ( check != NULL ) {
printf("%s", buff);
check = fgets(buff, sizeof(buff), stdin);
}
}