At one time, my code was extremely ugly, too. Then I left Blockland for a while and just used C.
When a small mistake could mean an unexpected segfault, you quickly learn to make errors obvious. And check all pointers against null. And confirm function parameters, even if "that will never happen", because it is far better that when "never" DOES happen, your code catches it and can respond (probably by giving a clear error log and quitting).
Most importantly: Clarity is critical. If you can easily understand code where the {}s are on the same line as other code, go for it. However, then you rely exclusively on your indentation to quickly identify what code happens when.
Also: Tabs are evil: Everyone sets them differently when they can set them. Use tabs for alignment, use spaces for indentation. That way, if someone uses a different tab width, only the alignment of things like the =s in a large block of assignments or data will be different.