
正常情况下没什么用,发生读的错误时,用到 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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)