What I get from playing that measure is this feeling:
A nat slips into Bb in an appoggiatura kind of way, C# slips into D, E slips into F and the G is a passing tone bringing F to Ab. Upward semitone movements often emphasize the higher note because of how we hear things in music. Therefore what you get through the "slipped into" notes are Bb D F Ab which is a Bb7 chord, which is also the V7 of Eb major. It has to be C# in order for us to have this semitone-slipping thingy happening. That's also why C# "feels right".
I remember that there were some changing conventions. One (an older one?) would insist that you put in a natural to cancel the Cb, and then a # to give it a new value of C#. Newer (but decades ago) says that if I'm going to write C#, obviously the flat is gone, so just stick in the # - what else would it be? That's what we have here. It actually does seem to follow rules.
One aspect of reading music is theory, because music theory also gives you clues. Theory, in turn, is best wedded to the ear, rather than just memorized rules.