Имеется код:
char field[3][3];
void enterX() {
cout << "Enter X on vertical: ";
int i;
cin >> i;
if (cin.good() && i < 3 && i >= 0)
{
}
else {
cout << "Please, enter the number 0-2!";
cin.clear();
cin.ignore(INT_MAX);
enterX();
}
cout << "Enter X on horizontal: ";
int j;
cin >> j;
if (cin.good() && j < 3 && j >= 0) {
}
else {
cout << "Please, enter the number 0-2!";
cin.clear();
cin.ignore(INT_MAX);
enterX();
}
field[i][j] = 'x';
}
Задача - считывание номера элемента массива с консоли и вставке в это место символа 'x'. Однако при неверном вводе не происходит рекурсия. В чём проблема?
Вообще-то это - cin.ignore(INT_MAX);
- игнорировать все (ну ладно, INT_MAX
символов) до конца файла - т.е. пока какое-то ^Z не закроет поток...
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
И вообще, я бы делал так (если уж приспичила именно рекурсия):
char field[3][3];
void enterX() {
cout << "Enter X && Y: ";
unsigned int i, j;
cin >> i >> j;
if (cin.fail() || i > 2 || j > 2)
{
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "Wrong values!\n";
enterX();
}
else
{
field[i][j] = 'x';
}
}
Update
Имея типичную оконечную рекурсию, лучше переделать ее в итерацию:
char field[3][3];
void enterX()
{
for(;;)
{
cout << "Enter X && Y: ";
unsigned int i, j;
cin >> i >> j;
if (!(cin.fail() || i > 2 || j > 2))
{
field[i][j] = 'x';
break;
}
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "Wrong values!\n";
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
По следам вопроса о битовом представлении вещественных чисел и моего ответа на него
Все мы знаем, что std::set - это красно-чёрное дерево (соответственно со сложностью поиска O(log n)), а std::unordered_set - хэш-таблица с поиском за константуКакие...
Столкнулся со следующей проблемой: Есть код, написанный не одним человеком, который работает с использованием MPIВ части последовательного...