- istream[meta header]
- std[meta namespace]
- basic_istream[meta class]
- function[meta id-type]
basic_istream<CharT, Traits>& putback(char_type c);
(非書式化入力関数)指定した1文字をストリームバッファの入力に戻す。
実引数で戻す文字を指定する点がunget
メンバ関数と異なる。
非書式化入力関数であるが、初めにeofbit
を消去する点が通常と異なる。
sentry
オブジェクトを構築する。!good()
ならsetstate(failbit)
を呼び出して終わる。rdbuf()->sputbackc()
を呼び出す。rdbuf()
がヌルポインタであるか、sputbackc()
がTraits::eof()
を返した場合、setstate(badbit)
を呼び出す。
*this
。
この関数は1文字も入力を行わないため、この後のgcount()
は常に0
を返す。
#include <iostream>
#include <locale>
#include <string>
// 入力の先頭を大文字にしてから文字列として読み込む
std::string get_word(std::istream& is) {
std::string s;
char c;
if (is >> c) {
// 大文字にしてからput_backで戻す。
is.putback(std::toupper(c, is.getloc()));
is >> s;
}
return s;
}
int main() {
std::cout << get_word(std::cin) << std::endl;
}
- putback[color ff0000]
- std::toupper[link /reference/locale/toupper.md]
- getloc()[link /reference/ios/ios_base/getloc.md]
- std::cin[link /reference/iostream/cin.md]
tomato
Tomato
basic_istream<CharT, Traits>& putback(char_type c) {
clear(rdstate() & ~eofbit);
try {
sentry s(*this, true);
if (s) {
if (auto sb = rdbuf()) {
if (sb->sputbackc(c) != Traits::eof()) {
return *this;
}
}
setstate(badbit);
}
} catch (...) {
例外を投げずにbadbitを設定する;
if ((exceptions() & badbit) != 0) {
throw;
}
}
return *this;
}
- C++98
basic_istream::unget
basic_streambuf::sputbackc