Почему код на Си пропускает «printf», без видимых причин?
Там условие выводить строку если она не равна h
для  большего понимания можете переписать// Если символ не равен h печатаем строку step 2
if (ch != 'h'){
                        printf( "step 2\n");
}
Вот тут я вам отформатировал ваш код.
Посмотрите внимательнее, что написано в блоке else if(...). 
Буквально так - "если введённый символ не равен 'c', то -> если введенный символ не равен 'h' то выводим 'step 2'.  Выводим 'step 3' " 
Поэтому при вводе 'h' он пропускает печать фразы 'step 2'.