If you want some good source code to read, I can heartily suggest Simon Tatham's Puzzle Collection (http://www.chiark.greenend.org.uk/~sgtatham/puzzles/, scroll down to the bottom for developer documentation). From it, you can learn:
- How to do object-oriented-like programming in C (each game is in a sense a class that implements the "game" interface).
- How to write portable C (hide all the unportable stuff behind your own interface).
- How to comment and document your code.
- How to do GUI programming in C.
- How to implement data structures in C (I recall the union find and 2-4 trees being done).