C self learning