std::basic_istream<CharT,Traits>::getline
< cpp | io | basic istream
basic_istream& getline( char_type* s, std::streamsize count ); |
(1) | |
basic_istream& getline( char_type* s, std::streamsize count, char_type delim ); |
(2) | |
从流释出字符,直至行尾或指定的分隔符 delim
。
第一版本等价于 getline(s, count, widen('\n')) 。
表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,从 *this
释出字符并存储它们于首元素为 s
所指向的数组的相继位置,直至出现任何下列条件(按出示顺序测试):
- 输入序列中出现文件尾条件(该情况下执行 setstate(eofbit) )
- 下个可用字符
c
是以 Traits::eq(c, delim) 确定的分隔符。释出该分隔符(不同于 basic_istream::get() )并计入gcount()
,但不存储它。
- 已经释出 count-1 个字符(该情况下执行 setstate(failbit) )。
若函数未释出字符(即 count < 1 ),则执行 setstate(failbit) 。
任何情况下,若 count>0
,则它存储空字符 CharT()
到数组的下个相继位置,并更新 gcount()
。
注意
因为条件 #2 在条件 #3 前测试,故准确适合缓冲区的输入行不会触发 failbit 。
因为终止字符计为释出的字符,故空输入行不触发 failbit 。
参数
s | - | 指向要存储字符到的字符串的指针 |
count | - | s 所指向的字符串的大小
|
delim | - | 释出所终止于的分隔字符。释出但不存储它。 |
返回值
*this
异常
若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit
设置了 exceptions() ,则重抛该异常。
示例
运行此代码
#include <iostream> #include <sstream> #include <vector> #include <array> int main() { std::istringstream input("abc|def|gh"); std::vector<std::array<char, 4>> v; // 注意:下列循环在从 getline() 返回的流上的 // std::ios_base::operator bool() 返回 false 时终止 for (std::array<char, 4> a; input.getline(&a[0], 4, '|'); ) { v.push_back(a); } for (auto& a : v) { std::cout << &a[0] << '\n'; } }
输出:
abc def gh
参阅
从 I/O 流读取数据到字符串 (函数模板) | |
提取带格式数据 (公开成员函数) | |
从流中读并取走(移除类似指针向下一个元素移动)一个字符 (公开成员函数) | |
读并取走一块字符 (公开成员函数) |