读到的字符串长度 用 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函数-百度百科
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)