Проблема, с которой вы столкнулись, связана с тем, как `std::cin` обрабатывает ввод. Когда вы пытаетесь ввести строку (например, "hello"), `std::cin` не может преобразовать её в число и устанавливает внутреннее состояние в "ошибочное". В результате переменная `num` не обновляется, и её значение остается неинициализированным (или 0, если до этого было присвоено 0).
Чтобы обработать эту ситуацию, вам нужно проверить состояние `std::cin` после попытки считывания. Если считывание не удалось, вы можете очистить состояние потока и выводить соответствующее сообщение. Вот исправленный код:
```cpp
#include <iostream>
int main() {
int num;
std::cout << "Введите число: " << std::endl;
std::cin >> num;
// Проверяем состояние потока
if (std::cin.fail()) {
// Если ввод не был успешным, очистим ошибки и игнорируем оставшийся ввод
std::cin.clear(); // Сброс состояния ошибки
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Игнорируем оставшийся ввод до конца строки
std::cout << "Введите число, а не строку!" << std::endl;
} else {
if (num % 2 == 0) {
std::cout << "Число [" << num << "] является четным" << std::endl;
} else {
std::cout << "Число [" << num << "] не является четным" << std::endl;
}
}
return 0;
}
```
### Объяснение кода:
1. **`std::cin.fail()`**: Эта функция проверяет, было ли успешным предыдущее считывание. Если пользователь ввел некорректные данные (например, строку), эта функция вернет `true`.
2. **`std::cin.clear()`**: Очищает состояние ошибок потока, чтобы избежать дальнейших проблем с вводом.
3. **`std::cin.ignore(...)`**: Игнорирует оставшиеся символы в текущем вводе до конца строки, чтобы очистить входной буфер от некорректных данных.
С помощью этих шагов ваша программа теперь сможет обрабатывать ввод некорректных данных правильно и сообщать пользователю, что вводить нужно именно числа.