Задать вопрос
  • Почему в C++ после несоответствия введенных данных определённому типу программа завершается?

    @QuickWind
    Суть следующая:
    Когда функция форматированного ввода-вывода получает неверные данные она устанавливает failbit потока, что сигнализирует об ошибке (когда "cin>>age;" получает букву, например).
    Когда этот поток используется в дальнейшем, то прежде проверяется его состояние, если stream.good() != true, то это признак произошедшей ошибки.
    Для работы с потоками используется класс sentry, который проверяет его состояние перед использованием, например:
    std::istream::sentry s(cin);
    if (s) {
    	// работаем дальше
    } else {
    	// ошибка!
    }

    В вашем примере на строке:
    cin >> answer;
    sentry(cin) == false, поэтому работа с потоком прерывается. К тому же после такого прерывания работы функции, в потоке остаётся хвост непрочитанных данных, который будет читаться следующими вызовами чтения и это надо учитывать.
    Таким образом, в данном случае необходимо использовать обработку ошибок, например:
    #include <limits>
    
    if (cin.eof() || cin.bad()) {
    	// Обработать при необходимости!
    }
    if (cin.fail()){
    	cin.clear();
    	cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    Обработчик сбрасывает биты ошибок и игнорирует мусорные данные до конца строки.
    Ответ написан
  • Добавления 3-ей планки оперативной памяти, сработает?

    @QuickWind
    При установке памяти надо сверяться с документацией на процессор, потому что возможны ограничения в типах и конфигурациях поддерживаемых модулей.
    Ответ написан
    Комментировать