@Iqv

Почему у меня прекращается работа программы в Cи?

Почему когда я запускаю эту программу
#include <stdio.h>


void hanoi(int height, int start, int finish)
{
    if (height == 1) {
        printf("%d %d\n", start, finish);
    } else {
        int tmp = 6 - start - finish;
        hanoi(height - 1, start, tmp);
        printf("%d %d\n", start, finish);
        hanoi(height - 1, tmp, finish);
    }
}

int main()
{
    int k;
    scanf("%d",k);
    hanoi(k,1,2);

    return 0;
}

Я ввожу одно число и программа прекращает работу? И как это исправить?
  • Вопрос задан
  • 424 просмотра
Решения вопроса 1
aminought
@aminought
Потому что в scanf нужно передавать адрес переменной - &k. Да, и саму переменную инициализируй.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Olej
@Olej
инженер, программист, преподаватель
1. Про scanf вам уже сказали.
(т.е. у вас программа не "прекращается", как вы предполагали - она у вас просто аварийно слетает ;-) )

2. Можете переправить:
int tmp = start ^ finish;
Так куда понятнее и логичнее, чем какая-то арифметика с вычитаниями.

3. И, если уж развлекаетесь с рекурсией, то логичнее записать так:
int tmp = start ^ finish;
hanoi( height - 1, start, tmp );
hanoi( 1, start, finish );
hanoi( height - 1, tmp, finish );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы