- istream[meta header]
- std[meta namespace]
- basic_istream[meta class]
- function[meta id-type]
basic_istream<CharT, Traits>& unget();
(非書式化入力関数)最後に読み取った1文字をストリームバッファの入力に戻す。
非書式化入力関数であるが、初めにeofbit
を消去する点が通常と異なる。
eofbit
を消去する。sentry
オブジェクトを構築する。!good()
ならsetstate(failbit)
して終わる。rdbuf()->sungetc()
を呼び出す。rdbuf()
がヌルポインタであるか、sungetc()
がTraits::eof()
を返した場合、setstate(badbit)
を呼び出す。
*this
。
この関数は1文字も入力を行わないため、この後のgcount()
は0
を返す。
#include <iostream>
#include <locale>
#include <sstream>
#include <string>
// isからアルファベットだけを読み込んで返す関数。
std::string input_alphabet(std::istream& is) {
std::string s;
char c;
while (is.get(c)) {
// getで得た文字がアルファベットではなかったら、ungetでストリームに戻す。
if (!std::isalpha(c, is.getloc())) {
is.unget();
break;
}
s.push_back(c);
}
return s;
}
int main() {
std::istringstream iss("abc123");
std::cout << input_alphabet(iss) << std::endl;
// 残りを出力
std::cout << iss.rdbuf() << std::endl;
}
- unget()[color ff0000]
- std::isalpha[link /reference/locale/isalpha.md.nolink]
- getloc()[link /reference/ios/ios_base/getloc.md]
- push_back[link /reference/string/basic_string/push_back.md]
- std::istringstream[link /reference/sstream/basic_istringstream.md]
- rdbuf()[link /reference/ios/basic_ios/rdbuf.md]
abc
123
basic_istream<CharT, Traits>& unget() {
clear(rdstate() & ~eofbit);
try {
sentry s(*this, true);
if (s) {
if (auto sb = rdbuf()) {
if (sb->sungetc() != Traits::eof()) {
return *this;
}
}
setstate(badbit);
}
} catch (...) {
例外を投げずにbadbitを設定する;
if ((exceptions() & badbit) != 0) {
throw;
}
}
return *this;
}
- clear[link /reference/ios/basic_ios/clear.md]
- rdstate()[link /reference/ios/basic_ios/rdstate.md]
- eofbit[link /reference/ios/ios_base/type-iostate.md]
- sentry[link sentry.md]
- rdbuf()[link /reference/ios/basic_ios/rdbuf.md]
- sungetc()[link /reference/streambuf/basic_streambuf/sungetc.md]
- exceptions()[link /reference/ios/basic_ios/exceptions.md]
- badbit[link /reference/ios/ios_base/type-iostate.md]
- C++98