Sigue leyendo y, sobre todo, haz programas. Un error que cometemos muy comúnmente es sobrestimar nuestro conocimiento. Cualquier libro, incluso de los buenos, por sí sólo únicamente te enseñará una pequeña parte de lo que hay que saber, así que lo que sigue es, además de buscar libros sobre cosas más avanzadas, hacer muchos programas para asegurarte de haber aprendido
bien lo que leíste. Sólo con programas de libro no vas a llegar muy lejos. Puedes haberte leído un manual de 1000 páginas de C o C++ y haber hecho todos los ejercicios, y aún así, tu nivel no pasará de básico, a menos de que por tu cuenta intentes hacer cosas más complejas y bien hechas.
Te voy a dar un ejemplo muy sencillo que siempre me ha parecido muy útil para ilustrar el punto (es un ejercicio para hacerse uno mismo, no hace falta responderlo en un foro). Imagina que tienes el siguiente fragmento de código:
printf("Escribe un numero: "); printf("Escribe un numero: ");
Es un simple programa que pide dos números (y digamos que al final los muestra, para comprobar que los leyó correctamente). Es casi un "Hola mundo", un juego de niños, ¿cierto...? ¿Pero qué pasa si el usuario escribe letras en lugar de números? Sin consultar ningún libro, simplemente observando esas 4 líneas, ¿sabes exactamente de qué manera va a fallar el programa? ¿Que vería el usuario luego de teclear, digamos, "asdf" en el primer scanf? ¿Por qué falla de
esa forma? E igualmente importante, ¿podrías corregirlo, de nuevo, sin consultar manuales e incluso sin recurrir a un compilador? No necesitaría ser perfecto; simplemente que lea dos números y, si el usuario escribió símbolos que no son números, lo detecte, informe del error, y vuelva a pedir el número, todo esto con scanf. Ojo, que hay mejores formas de leer datos, por ejemplo, usando fgets y parseando la cadena leída, pero en este caso de lo que se trata es de ver si sabemos cómo funciona scanf, que es una de las primeras funciones que se aprenden en C. Y ya que estamos ¿por qué en la enorme mayoría de los casos, al trabajar con ints, deberíamos usar el especificador %d en lugar de %i (que muchos tutoriales usan
)?
La cuestión es que muchísima gente que se ha leído libros enteros sobre C no es capaz de corregir mentalmente esto que es poco más que un Hola mundo. Y esto no es una crítica, ni a los programadores ni a los libros. Es entendible: escribir código correcto y (casi) libre de errores es muy difícil, tedioso, y conlleva muchísimo trabajo. Cualquier manual tendría que tener 2000 páginas o más. El punto aquí es entender que los libros únicamente nos dan una base. Enseñan poco sobre muchos temas. Lo que nos toca después de leerlos es profundizar en ellos. El ejemplo de arriba tiene como objetivo hacernos pensar (suponiendo que no podamos contestar todas las preguntas/corregir el programa sobre papel): si en un ejercicio tan simple ya tenemos algunas carencias, ¿cuánto nos falta aprender sobre tantos temas que creíamos dominados? Te recomiendo que intentes hacer programas con lo que ya sabes, pero tratando de que sean correctos. Intenta hacer que tus programas fallen, y cuando lo hagan, investiga por qué y corrígelos. Esto te ayudará a profundizar en la programación de una forma en que difícilmente se consigue sólo con libros. Cuando sientas que ya eres capaz de hacer programas más o menos correctos con todos los temas básicos de C, busca libros, no tanto sobre el lenguaje en sí sino sobre aplicaciones del lenguaje. Programación de aplicaciones en red, multihilo, bases de datos, videojuegos o lo que te interese. Y de nuevo, ten presente que los ejemplos que veas en libros y tutoriales son sólo para fines didácticos. Están muy, pero muy lejos de tener calidad de producción. Te toca a ti mejorarlos y hacerlos casi a prueba de fallos. La mejor forma de aprender cómo funciona algo es rompiéndolo y viendo qué tiene dentro.
Sobre tu otra duda, si te gusta programar en C, aprender C++ podría ser una buena opción. La mayor parte de lo que hay en C es válido en C++, además de que tiene más salida laboral, y aunque actualmente hay varios lenguajes mucho más solicitados por las empresas, hay muy pocos buenos programadores en C++. Las empresas sufren bastante para conseguir personal calificado y en muchas ocasiones tienen que traerlos de otros países, o terminan contratando gente que no cumple al 100% con los requisitos, y los tienen que capacitar, y aún así muchas veces al final no se quedan, y se pierde tiempo y dinero en eso. Si aprendes realmente bien C++, no vas a tener mucha competencia y seguro no te faltará trabajo.