getline()的返回值

getline()的返回值,第1张

getline()返回 *this

正常情况下没什么用,发生读的错误时,用到 ios::exceptions

内部状态标识 eofbit,failbit,badbit 有用。

首先你只要弄明白了这个版本getline()函数的函数原型,这些问题就迎刃而解了。它的函数原型是:

istream&getline(char* sink,int size,char delim='\n')各参数意义:

从调用它的输入流类型对象,也就是cin中读取size个字节并将它们存储到sink所指向的字符数组中。读 *** 作直到遇到delim字符,或 已经读入了size个字符,或遇到文件结束符才结束。如果出现了delim,读并丢弃delim,"读并丢弃"意思是说输入流中delim字符没有了,但delim字符并没有存入到sink所指向的数组。另外还有一点要注意的是:delim默认情况下是'\n',。也就是说你写的cin.getline(s,1000,,'\n')可以简写成cin.getline(s,1000)而且getline()函数会自动为读取的字符末尾加一个空字符'\0'.

看下面的程序你就明白了:

当我输入:012345678910十二个字符时,运行结果为:

看似只读入9个字符,其实不然,最后一个空字符'\0'是不可打印字符,所以没有显示出来,但你可以访问一下,在程序里加一条cout<<s[9]:改后如下:

运行结果为:

和第一个的运行结果比较,你会发现Press any key to continue_向右移动了一格,这一格就是那个不可见的空字符'\0'。

函数原型:

istream&getline (istream&is, string&str, char delim)

istream&getline (istream&is, string&str)

参数1是 输入文件流对象。

参数2是 string 型对象。

参数3是选项参数,若有,它便是分隔符。

getline(input, line) 里 input 是 输入文件流对象,

前面定义了:ifstream input("test.txt")对应文件 test,txt

前面定义了: string line, word 所以line 是 string 型对象。

getline(input, line) 从 test,txt 读入1行内容,放入 string 型对象 line。

返回值是 输入文件流对象 input (如果文件到达EOF 或 发生错误,eofbit,failbit,badbit 的标志位将变化)。

while( getline(input, line) ) {} 循环体内应加输入状态的判断,及时 break


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8556434.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存