Рекурсия не сохраняет новое значение переменной C++

Пытался написать защиту от дурака. Если пользователь ввёл неправильное значение, то оно сохраняется в переменной task до самого завершения программы. А значение переменной должно перезаписываться на новое введенное пользователем после удаления при новом проходе рекурсии. Хотя код не выводит ошибок в visual studio. Почему так происходит и как это исправить?

void choice() {
    int* task = new int;

    printf("What are we going to do /\n\t1. Encoding\n\t2.  Decoding\nSelect 1 or 2: ");            
    cin >> *task;       
    gets_s(string);
    if (*task == 1) {
        encode(); 
    }
    else if (*task == 2) {
        decode(); 
    }
    else {
        printf("please key in 1 or 2 , try it again\n");
        delete task;
        choice();
    }
}

пример работы моего говнокода


Ответы (1 шт):

Автор решения: DmitryK

Проще сделать цикл запроса правильного выбора, чем рекурсивно запускать функцию.

cout << "What are we going to do /\n\t1. Encoding\n\t2.  Decoding\n\t3. Exit\nSelect 1, 2 or 3: ";
    int choice;
    while(true)
    {
        cin >> choice;
        if(choice == 3) return 0;
        if(choice > 0 && choice < 3)
            break;
        cout << "\nWrong choice!\nEnter 1, 2 or 3: ";
    }
→ Ссылка