首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fstream和sstream处理:输入重复

fstream和sstream处理:输入重复
EN

Stack Overflow用户
提问于 2015-04-07 20:56:15
回答 3查看 36关注 0票数 0

我有一个文本文件如下:

代码语言:javascript
复制
1 A Rocket-1 1.2
2 B Rocket-2 2.3
3 C Rocket-3 3.4
Invalid Format Line 
4 D Rocket-4 4.5
5 E Rocket-5 5.6

如您所见,所采用的格式是:<int> <char> <string literal> <float>

我想从每一行中提取各个数据类型并打印出来。我做了这个:

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;

int main() {
    ifstream in;
    in.open("input.txt");
    if (in) {
        while (getline(in, x)) {
            istringstream iss(x);
            iss >> i >> c >> s >> f;
            cout << "\n\nInteger:" << i << ", Character: " << c << ", String: "
                << s << ", Float: " << f << endl << endl;
        }       
    }
    else {
        cout << "\nError reading input file\n";
    }
    cin.get();
    return 0;
}

产出如下:

代码语言:javascript
复制
Integer:1, Character: A, String: Rocket-1, Float: 1.2

Integer:2, Character: B, String: Rocket-2, Float: 2.3

Integer:3, Character: C, String: Rocket-3, Float: 3.4

Integer:3, Character: C, String: Rocket-3, Float: 3.4

Integer:4, Character: D, String: Rocket-4, Float: 4.5

Integer:5, Character: E, String: Rocket-5, Float: 5.6

如您所见,其中一行(第3行)正在重复。当我有一个无效格式的行时,我只想忽略它,并且平稳地(不崩溃)转换到下一个有效的格式行。请建议修改我的代码来处理这个问题。

EN

回答 3

Stack Overflow用户

发布于 2015-04-07 21:03:41

您可以测试流插入的结果。如果格式不正确,它将处于无效状态:

代码语言:javascript
复制
if(!(iss >> i >> c >> s >> f)) // skip the loop if not correct format
    continue; 
票数 0
EN

Stack Overflow用户

发布于 2015-04-07 21:04:10

您所面临的问题是由于无效的字符串被放置在您的区域流中,然后尝试根据有效的格式进行提取。当然,这是失败的,因此变量i、c、s和f保留了它们的原始值。如果您想忽略无效的行,您应该查询istringstream的失败位。与…有关的东西

代码语言:javascript
复制
if ( iss.fail() ) {
    continue;
}

应该能起作用。来自gtgt

如果提取失败(例如,在需要数字的地方输入一个字母),则值将保持不变,并设置故障位。

票数 0
EN

Stack Overflow用户

发布于 2015-04-07 21:07:28

提取后,可以检查ios_base::iostate是否为eofbit、故障位或坏位。请参阅http://www.dcs.uni-pannon.hu/smidla/web/cplusplus/reference/iostream/istream/operator%3E%3E/index.html

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

https://stackoverflow.com/questions/29501163

复制
相关文章

相似问题

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