The answer has been given already: \ is special, because it's the escape character, and you need to escape it with itself if you want a literal \ in the outoupt.
This, however, can make the drawing confused.
To improve the things, you can use raw strings literals
    printf(R"(--------
----O---
---/|\--
---/-\--)");
Notice that I've truly inserted a line break in place of the \n escape sequence, because \n would be literally interpreted as a \ followed by the letter n.
Clearly, you can still have issues, if a string contains exactly the characters )", because it will be detected as the closing token of the string:
//               +---- code invalid from here
//               |
//               v
printf(R"(-----)"---)");
but you can still solve it, for instance by adding another set of wrapping "s:
printf(R""(-----)"---)"");
or anything else in between the " and (, and between ) and " (not symmetrized):
printf(R"xyz(-----)"---)xyz");
//                        ^
//                        |
//                        +--- not zyx