getline是如何结束的?

getline是如何结束的?,第1张

string 的 getline 读到一个新行或错误,返回 istream !

判断是否读到文件结束,仍旧用 istream 的函数判断。

读到的字符串长度 用 string 的 size() 函数判断.

从实际 *** 作(写程序)来说,直接用文件流的 .getline() 方便。

下面用你想用的 string 的 getline:

#include <iostream>

#include <fstream>

#include <string>

using namespace std

int main () {

string str

filebuf fb

fb.open ("aaa.txt",ios::in) // 假定文件名 是 aaa.txt

istream is(&fb)

while(1){

getline (is,str) // string 的 getline

if (is.eof()) break // 文件结束判断

cout <<"getline:" <<str <<" strlen="<<str.size()<<"\n"

}

fb.close()

return 0

}

--

如果 str.size() 得0 就是空行。

你是C语言新手吧,C++的头文件里有个BUG,一些用户还未修改。

就是cin与getline连用时就会有的。

我解释一下:当你输入filename时,比如是d:\1.txt你会回车表示结束输入,在C++字符串里面表示为d

:

\

1

.

t

x

t

\0。这个字符串里一共是9个元素,最后一个是结束符"\0"。当系统读入数据后,会把\0留下,而恰巧getline里面的结束符也是\0。这使得前面那个\0被系统误认为是你对getline输入的,所以就结束getline语句。

修改如下:

#include

<iostream>

#include

<fstream>

#include

<string>

using

namespace

std

int

main(void)

{

string

filename

fstream

fn

cout<<"请输入文件路径:"<<flush

cin>>filename

fn.open(filename.c_str(),ofstream::out|ofstream::app)

if

(fn)

cout<<filename<<"\t\t"<<"文件已经建立"<<endl

cout<<"输入要输入的内容"<<endl

getline(cin,filename)

getline(cin,filename)//只需再添加一个getline,如果要改头文件去官网

fn<<filename

fn.close()

system("pause")

return

0

}

还有什么问题?

C++中本质上有两种getline函数,一种在头文件<istream>中,是istream类的成员函数。一种在头文件<string>中,是普通函数。

istream&getline (char* s, streamsize n, char delim )

在函数遇到和结束定界符相等的字符时函数结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放入要生成的字符串。所以由此可以理解输入结束后的第一个回车是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的。

扩展资料:

getline不是C库函数,而是gcc的扩展定义或者C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。

1)到文件结束,

2)遇到函数的定界符,

3)输入达到最大限度。

参考资料:getline函数-百度百科


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

原文地址: https://outofmemory.cn/tougao/12044211.html

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

发表评论

登录后才能评论

评论列表(0条)

保存