I'm a little bias with C# (because I hate it), but I would urge people not to use it when possible (the only thing it's really needed for is RTM tools and even that will change soon enough). The biggest problem with C# is it's platform dependent, if you wanted to write something very similar to C#, you'd probably want to learn Java, at least it's a write-once-read-anywhere. Another disadvantage of C# and Java is it's very easy to reverse engineer due to bytecode, so if you plan on making something that you'd rather your clients not have access to the algorithm, avoid it.
C++ is a fun language and I would recommend it, especially as a first language, but the thing is you'd have to learn it properly. C++ is a great and powerful language but it's also dangerous, for many reasons, one of which is the lack of boundary checking. For instance, if you try to access an index of an array that does not exist in something like Python or Java, you'll get an error due to boundary checking. C++ does not have this, and will let you read/write with any space in memory, so if you try to write / read to an address which does not belong to the program, you'll most likely get a segmentation fault and the program will crash. This leaves your program open to instability and even exploitation.
In short (TL
R), learn C++ if you're willing to learn it properly, otherwise you'll get into bad habits and you'll most likely end up writing software that's incredibly insecure and unstable. If you don't want to learn a language as difficult and meticulous like C++ for your first language, I'd start with something like Python or maybe Java.