>i think when i can remember and i use regular the whole language with out looking in the books
Good luck with that. I write C compilers for a living, and still have to consult the references on a daily basis. There are too many nuances to waste your valuable gray matter memorizing. Further, there are parts of the language that simply don't need to be used regularly. How often are you going to use setjmp/longjmp in production code? Or trigraphs?

>and i know the ins and outs well enough to being able to write a program that i would like to write
You'd be surprised at how little you need to know before you can write useful software.

>and know how it should be done before starting i must have learned c well enough to use it.
This has nothing to do with C and everything to do with general programming. You can know C inside-out and be able to quote the standard document from memory, but still not be able to program your way out of a wet paper bag. In my opinion, programming concepts like data structures and algorithms will serve you far better than mastery of a programming language.