Метод bad
Метод bad класса ios возвращает true, если
в потоке произошла критическая ошибка, из-за которой
данные могли быть потеряны. В отличие от ошибок,
отслеживаемых методом fail, ошибка badbit
обычно указывает на серьезные проблемы, например,
потерю целостности буфера или сбой ввода-вывода,
после которых дальнейшая работа с потоком может быть
небезопасной. Метод не принимает параметров и
возвращает значение типа bool.
Синтаксис
bool bad() const;
Пример
Давайте проверим состояние стандартного потока вывода после успешного вывода строки:
#include <iostream>
using namespace std;
int main()
{
cout << "abcde" << endl;
if (cout.bad()) {
cout << "Stream is bad" << endl;
} else {
cout << "Stream is good" << endl;
}
return 0;
}
Результат выполнения кода:
"abcde"
"Stream is good"
Пример
Давайте сравним поведение методов bad и
fail при попытке прочитать число там, где
находится текст:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
istringstream stream("abcde");
int num;
stream >> num;
cout << "bad: " << stream.bad() << endl;
cout << "fail: " << stream.fail() << endl;
return 0;
}
Результат выполнения кода:
"bad: 0"
"fail: 1"
Как видно из результата, ошибка форматирования
устанавливает флаг failbit, но не badbit,
поэтому метод bad возвращает false.