A word about Prata's "C Primer" -
I'm currently learning C from the 5th edition of this book. While it is an excellent book in many ways, I do have some misgivings. Mainly, I do not think it's suitable for someone who has no programming experience at all. It would be if the first 120 pages or so weren't so long winded - in my opinion they go into far too much detail about the different data types and their sizes on different systems. Prata also spends far too much time in the beginning on conversion specifiers and modifiers.
Sure, introduce these things - but in my opinion there is no need for the beginner to learn every single type of specifier and data type and promotion/demotion rule at that stage of the game. Set out the basic principles and put the rest in the appendix.
I've programmed before in a couple of other languages but even so I found myself getting confused and a little bored going through this first part of the book. Prata even sees fit to inform the reader that "under K&R C, but not current C, float is automatically converted to double." Why confuse a beginner with that kind of useless information at a point in the learning curve when he or she is likely to feel a little "shaky" anyway? The C style of programming can be daunting enough to someone who has only programmed in a higher language like Python before, without being bombarded with excruciating minutia like this!
Great for an existing programmer who wants to learn C thoroughly from scratch, but not so great for a total beginner IMO. Also his explanation of pointers is somewhat confusing for beginners.
On the plus side, the exercises at the end of each chapter are great - very well composed and satisfying to complete.