Помогите сделать так, чтобы после неверного ввода числа снова приходило уведомление с повторной просьбой ввода

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
 
int main(){
    const int size = 13;
    int matrix[size];
    srand(time(NULL));
    //заполнение массива случайными числами
        int max = 7, min = -16;
        for(int i = 0; i < size; i++)
        {
        matrix[i] = 1 + rand() % (max - min) + min;         
        cout<< " M["<<i<<"]="<<matrix[i]<<endl;
    }
    int x;
    cout<<"Введите число от -16 до 7:";
    cin>>x;
    for(int i=0;i<size;i++){   
     if(matrix[i]>=x) cout<<"Число, которое не меньше за то, что вводил пользователь:"<<matrix[i]<<endl;
   if(x > 7 || x < -16) 
      cout<<"Неверно! Введите наново:"; //Вот здесь програма зависает. 
      cin>>x;
       }                   
return 0;
}

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

Автор решения: Andrey Kanevskoi

Просто добавьте флаг перед циклом и проверяйте его внутри цикла. Пока число не будет введено верно, будет выполняться первое условие. Как только Х станет верным, сработает вторая ветвь и цикл завершится (мы поменяли флаг).

…
cin >> x;
bool isRightNumber = false;
while(!isRightNumber) {
  if(x > 7 || x < -16) {
    cout<<"Неверно! Введите наново:"; 
    cin>>x;
  } 
  else {
    cout<<"Число, которое не меньше за то, что вводил пользователь:"<<matrix[i]<<endl;
    isRightNumber = true;
  }
}
…
→ Ссылка
Автор решения: Harry

Я бы и не отвечал... но приведенные ответы смотрят только на диапазон. А если пользователь введет что-то типа abc (ну, не число)?

Я как-то, фрилансируя :), для студентов набросал такой способ чтения с обработкой ошибок, смотрите, может, пригодится :)

int inputInt(const char * prompt, int m = INT_MIN, int M = INT_MAX)
{
    int N;
    for (;;) {
        std::cout << prompt << " (целое от " << m << " до " << M << "): " << std::flush;
        if ((std::cin >> N).good() && (m <= N) && (N <= M)) return N;
        if (std::cin.fail()) {
            std::cin.clear();
            std::cout << "Неверный ввод, повторите.\n";
        } else {
            std::cout << "Число вне допустимого диапазона значений. Повторите ввод.\n";
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    }
}

a = inputInt("Введите размер массива",1,10);
→ Ссылка