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