Я думаю, что одна проблема в вашем третьем цикле, которая немного отличается от двух других:
for ( c = b; l < c && c <= h; ++c ) {
На первом проходе a == 1
и b == 1
и l == 1
, поэтому c
установлено в 1, а l < c
оценивается как ложное, поэтому внутренний цикл не выполняется.
Вам действительно не нужно проверять нижние границы (l < c
, или l <= b
и т. д.).в более ранних циклах), потому что вы знаете из способа их установки, что условие должно быть истинным, за исключением случаев, когда вы делаете опечатку в условии.
Каноническая форма для цикла for в C ++:
for (int i = lo; i < hi; ++i)
для подходящего типа (int
здесь), индексная переменная (i
) идет от нижней границы lo
до верхней границы hi
, но не включает ее.Это работает и в C99, но не в C89.Если вам нужно значение индекса цикла после его завершения, вы можете объявить переменную в большем объеме, чем просто цикл, как показано, но вы обычно избегаете этого.(Я использовал i++
в комментарии, потому что я нереформированный программист C, но предварительное увеличение лучше в C ++ в целом.)