首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ getline和stringstream

c++ getline和stringstream
EN

Stack Overflow用户
提问于 2013-05-04 20:15:35
回答 1查看 22.4K关注 0票数 4

我正在尝试读入一个文件,它有5行,每行都有3-4个字符串长度。下面是我的输入文件:

代码语言:javascript
复制
10:30 Hurley 1234567A 10:15
10:45 Hurley 1234567A 11:30
08:35 Jacob 1x1x1x1x1x
08:35 Jacob 1x1x1x1x1x 08:10
08:05 Jacob 1x1x1x1x1x
08:45 Sayid 33332222 09:15

这就是我得到的:

代码语言:javascript
复制
10:30 Hurley 1234567A   10:15
10:45 Hurley 1234567A   11:30
08:35 Jacob  1x1x1x1x1x 11:30
08:35 Jacob  1x1x1x1x1x 08:10
08:05 Jacob  1x1x1x1x1x 08:10
08:45 Sayid  33332222   09:15

这是我的代码:

代码语言:javascript
复制
void enor::Read(status &sx,isle &dx,ifstream &x){
    string str;
    getline(x, str, '\n');
    stringstream ss;
    ss << str;
    ss >> dx.in >> dx.name >> dx.id >> dx.out;
    /*getline(x, str, '\n');
    x>>dx.in>>dx.name>>dx.id>>dx.out;*/
    if(x.fail())
        sx=abnorm;
    else
        sx=norm;
}

如果没有第2行和第4行的时间填充,我如何读取文件?我希望dx.out为空。我是否应该使用另一种方法,或者是否可以使用stringstream?

EN

回答 1

Stack Overflow用户

发布于 2013-05-04 20:24:13

如果>>发现stringstream中什么也没有剩下,它将保持变量不变-因此dx.out保留其最后一行的值。但是,您可以这样做

代码语言:javascript
复制
ss >> dx.in >> dx.name >> dx.id;
if (!(ss >> dx.out))
    dx.out = "";

因为ss >> dx.out返回ss,并且在将流转换为bool时(例如在if条件中使用它时),如果最后一次读取尝试失败,它将返回false

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16374187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档