std::basic_ios<CharT,Traits>::clear
From cppreference.com
void clear(std::ios_base::iostate state =std::ios_base::goodbit); | ||
Sets the stream error state flags by assigning them the value of state. By default, assigns std::ios_base::goodbit which has the effect of clearing all error state flags.
If rdbuf() is a null pointer (i.e. there is no associated stream buffer), then state |std::ios_base::badbit is assigned.
Contents |
[edit]Parameters
state | - | new error state flags setting. It can be a combination of the following constants:
|
[edit]Return value
(none)
[edit]Exceptions
If the new error state includes a bit that is also included in the exceptions() mask, throws an exception of type failure.
[edit]Example
clear()
without arguments can be used to unset the failbit
after unexpected input; for std::cin.putback(c) see ungetc
.
Run this code
#include <iostream>#include <string> int main(){for(char c :{'\n', '4', '1', '.', '3', '\n', 'Z', 'Y', 'X'})std::cin.putback(c);// emulate user's input (not portable: see ungetc Notes) double n;while(std::cout<<"Please, enter a number: "&&!(std::cin>> n)){std::cin.clear();std::string line;std::getline(std::cin, line);std::cout<< line <<"\nI am sorry, but '"<< line <<"' is not a number\n";}std::cout<< n <<"\nThank you for entering the number "<< n <<'\n';}
Output:
Please, enter a number: XYZ I am sorry, but 'XYZ' is not a number Please, enter a number: 3.14 Thank you for entering the number 3.14
[edit]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 412 | C++98 | an excption would be thrown if the current error state includes a bit that is also included in the exceptions() mask | checks the new error state instead |
[edit]See also
sets state flags (public member function) | |
returns state flags (public member function) |