Last 30 Days
No notifications
You've covered the full C journey:
1. Pick a problem. Read it twice. Solve on paper first.
2. Code it. Compile with gcc -Wall -Wextra -fsanitize=address -g.
3. Test edge cases — empty input, max size, negatives, zero.
4. Refactor. Can you make it shorter? Faster? Safer?
5. Move on. Don't get stuck >45 min — read an editorial, learn, retry tomorrow.
| Tier | When | What |
| Warm-ups | Days 1–7 | Easy I/O, math, strings |
| Core | Weeks 2–4 | Arrays, loops, functions, basic pointers |
| Memory | Weeks 4–6 | malloc/free, dynamic arrays, linked list |
| Projects | Month 2 | Calculator, todo CLI, file scanner, mini shell |
| Algorithms | Ongoing | Sorting, searching, recursion, bit tricks |
Knowing the syntax is 10% of programming. The other 90% is building things and debugging them. This topic exists to push you from "I read about C" to "I write C".
Pick ONE small problem per day. 30 minutes is enough. Consistency beats marathons.
> The best C programmers got there by writing many small programs, not by reading one giant book.
# Strict warnings + address sanitizer + debug info
gcc -Wall -Wextra -Wpedantic -fsanitize=address -g main.c -o main| Flag | What it gives you |
-Wall -Wextra | Most useful warnings — fix them all |
-Wpedantic | Strict ISO C compliance |
-fsanitize=address | Catches use-after-free, leaks, overflows at runtime |
-g | Debug symbols (so you can step in gdb / VS Code) |
-O2 | Optimisations (use for release; off while debugging) |
Fix every warning. Warnings are usually bugs in disguise.
1. Number Guessing Game — pick a random number, prompt user, give "higher / lower" hints, count attempts.
2. Tip Calculator CLI — read bill amount and people, print per-person share with rounding.
3. Word Counter — read a file, count lines, words, characters (like Unix wc).
4. ROT13 / Caesar Cipher — encrypt/decrypt text with a shift key.
5. Temperature Converter — switch between Celsius / Fahrenheit / Kelvin.
6. TODO List CLI — add / list / mark-done / delete tasks, persist to a text file. 7. Hangman — load random word from a file, manage guesses, draw the man. 8. Tic-Tac-Toe — 2-player on a 3×3 board, detect win/draw. 9. Phonebook — store contacts in a struct array, save/load to disk, search by name. 10. Linked List Library — implement push/pop/insert/remove/print + iterator.
11. Dynamic Stack & Queue — generic, with malloc, free, grow/shrink. 12. Hash Table — with chaining; insert/get/delete in O(1) average. 13. Mini Shell — read a command line, fork/exec it, support pipes (Unix) or basic command parser (cross-platform). 14. JSON Parser — given a small JSON string, output a parsed structure. 15. Matrix Library — add/multiply/transpose/inverse; bonus: read from CSV.
| Topic | What to drill | Where |
| Sorting | bubble, selection, merge, quicksort | LeetCode 912 |
| Searching | linear, binary, two-pointer | HackerRank Algorithms |
| Recursion | factorial, fib, hanoi, subsets | GfG Recursion |
| Bit tricks | popcount, single number, power of 2 | LeetCode Bit Manipulation |
| Strings | reverse, palindrome, anagram | HackerRank Strings |
| Linked lists | reverse, detect cycle, merge | LeetCode Linked List |
hackerrank.com/domains/c — official C problems, easy to hard.codechef.com/practice/beginner — short, fast wins.| Tool | Purpose |
printf-debugging | Quick & dirty — print state at suspicious places |
gdb / VS Code debugger | Set breakpoints, step, inspect variables |
AddressSanitizer (-fsanitize=address) | Catches memory bugs at runtime |
valgrind --leak-check=full | Finds leaks and uninit reads |
clang --analyze | Static analysis — finds bugs without running |
If you can do all of these without looking, you've learned C properly:
scanf and validate itstrlen, strcpy, strcmp from scratchC is the gateway to systems programming. After this you can pick:
| Direction | Build on |
| C++ | Same syntax, adds classes, templates, STL |
| Rust | Modern systems language with C-like performance + memory safety |
| OS / Kernel | The Linux kernel, embedded firmware, compilers — all C |
| Game dev | Engine code in C/C++, scripting on top |
| Competitive programming | C++ for speed; algorithms you learned all transfer |
> "The only way to learn a new programming language is by writing programs in it." — Kernighan & Ritchie
You've finished the C track. Now go build something you find genuinely cool. The craft is in your hands. 🛠️