That's a GREAT question!.
Remember that the "c" variable is an int variable. You are using it to store what we call a "character", but ultimately "c" just holds a number.
What number does it store?
Under the "good" logic, it stores ASCII decimal 65 for 'A', etc. for each character it reads. That is fine.
Under the "bad" logic, it stores a 0 or 1 (equal or unequal). What ASCII characters do 0 or 1 represent? Some weird control character. That's why you get the garbage printed.
Does that make sense to you?