Coventry put in their best home performance of the season to claim their first league win since August.
Reading missed a golden chance to take the lead in the first minute when Glen Little headed a Paul Brooker cross over from close range.
They did break the deadlock after only 11 minutes though when Coventry full-back Stuart Giddings slipped while attempting to deal with a James Harper cross.
The ball fell kindly to Little, who had time to pick out Lloyd Owusu who could not miss from six yards.
However, parity was restored two minutes later. Stern John was surrounded by Reading players as he held the ball up in the box, but Steve Sidwell needlessly bundled him over.
John picked himself up to convert the spot kick – his second goal for City.
He nearly claimed a third on the half-hour mark when he spotted Marcus Hahnemann off his line and tried a brilliant chip from the edge of the box but it drifted narrowly wide.
Coventry sensed a chance to claim their first league win since August and piled on the pressure, with Andy Morrell going close with a volley from Giddings' deflected cross.
They took the lead after the break, when Patrick Suffo, a half time replacement for the injured John, found Rohan Ricketts.
The on-loan Spurs man found Morrell who chested down and blasted the ball past the flailing Hahnemann.
Eddie Johnson then increased Coventry's lead with an equally well-taken effort.
The on-loan Manchester United man latched onto an excellent through-ball from Suffo and buried it in the bottom corner.
Dave Kitson capitalised on a goalmouth scramble to pull a goal back on 75 minutes but Coventry held on for a vital win.