- istream[meta header]
- std[meta namespace]
- basic_istream[meta class]
- function[meta id-type]
basic_istream<CharT, Traits>& read(char_type* s, streamsize n);(非書式化入力関数)ストリームから指定した数の文字を入力する。
実引数として配列要素へのポインタsとその要素数nを受け取る。
getメンバ関数などと異なり、sの末尾にヌル文字を書き込む処理がない。
また、n文字より少ない段階でEOFに達した場合を入力失敗として扱う(failbitを立てる)点も、他の多くのメンバ関数と異なる。
sentryオブジェクトを構築する。sentryオブジェクトが失敗を示した場合、何もしない。good()メンバ関数を呼び出してfalseであったら、setstate(failbit)を呼び出して終了する。- 以下のいずれかを満たすまで、文字を入力して書き込む。
- 実引数で指定された
n文字まで入力した。 - EOFに達した。この場合、
setstate(failbit | eofbit)を呼び出す。
- 実引数で指定された
*this
#include <iostream>
int main() {
char s[8];
std::cin.read(s, sizeof s);
auto size = std::cin.gcount();
std::cout.write(s, size);
std::cout << std::endl;
}- read[color ff0000]
- std::cin[link /reference/iostream/cin.md]
- gcount()[link gcount.md]
- write[link /reference/ostream/basic_ostream/write.md]
ShinjukuNishiguchi
Shinjuku
basic_istream<CharT, Traits>& read(char_type* s, streamsize n) {
iostate state = goodbit;
try {
const sentry sent(*this, true);
if (sent) {
if (good()) {
for (streamsize i = 0; i < n; ++i) {
auto c = rdbuf()->sbumpc();
if (c == Traits::eof()) {
state |= failbit | eofbit;
break;
}
s[i] = Traits::to_char_type(c);
}
} else {
state |= failbit;
}
}
} catch (...) {
例外を投げずにbadbitを設定する;
if ((exceptions() & badbit) != 0) {
throw;
}
}
setstate(state);
return *this;
}- C++98