Reasons to learn C
C has a significant amount of software written in it, including the Linux kernel. Learn C if you ever want to hack on the kernel, any UNIX-based operating system, device drivers, or other embedded / firmware / device-level software.
It has two major compilers (gcc and clang), with gcc being the oldest and most popular and clang being younger but built on a better technical foundation. This is in addition to a high volume of static and dynamic analysis tools. Learn C if you like languages with lots of tool support available.
C is very good for writing simple single-threaded programs that go fast with low memory overhead. Learn and use C when you want more explicit control over your program's memory usage and the operations it performs, e.g., for implementing searching and sorting algorithms.
Learn C if you ever want to do any kind of reverse engineering or executable binary analysis. It's likely the thing you'll be analyzing will have been written in C or something similar.
Learn C if you want to get a good software engineering job. There are lots of opportunities for both maintaining old C code and writing new C code.Things that aren't reasons to learn C
Plenty of people might disagree with me on these, but I feel like there's a lot of misconceptions about what C is good for and what it isn't good for. Here's some things that it's not so great for.
Don't learn C for writing performant programs. Earlier I mentioned that C is good for writing simple programs with low memory overhead and great single-threaded performance. Anything more complex than this starts to get nontrivial very fast. This is because C has generally poor and difficult to use concurrency tools (complicated multithreading, synchronization, and atomic primitives that take a lot of effort to use correctly).
Don't learn C for writing anything complex that also needs to be correct. Proving the correctness of a C program is more or less impossible without first writing it in a second, more formal language. C is also full of undefined behavior, which is pretty easy to avoid, but you have to know what to look out for.
Don't learn C if your real goal is to learn C++. Just learn C++ in that case. C and C++ are different languages with very different best practices.
Don't learn C to make it easier to learn other languages later. IMO it's better to start with a functional language like a LISP or haskell than a procedural language like C.Other things to watch out for
C has no garabge collection, which can be a good thing or a bad thing, depending on your needs. Be careful about putting things on the heap with functions like malloc, since you are responsible for freeing that memory!
C has a very limited understanding of bits, which can actually make it somewhat difficult to write device-level or networking programs where each bit is important. Use bitfields with care.
Compared to other languages, C has a very empty standard library. Any datastructure more complicated than a character array you'll likely end up implementing yourself.How to learn Chttp://www.iso-9899.info/wiki/Main_Page
is the best starting point for finding resources for learning C. It will tell you what's good and what's not good. It's maintained by the fine folks on the ##c freenode IRC channel, which is also full of very knowledgable people. They take C very seriously.